{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 利用XGboost实现Happy Customer Bank目标客户（贷款成功的客户）识别"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1 数据读取、处理及特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n",
      "  \"This module will be removed in 0.20.\", DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "# 导入必要的工具包\n",
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.metrics import roc_curve, auc\n",
    "\n",
    "from scipy.special import cbrt\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.cross_validation import KFold\n",
    "from sklearn.cross_validation import StratifiedKFold\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.1 数据初步处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\IPython\\core\\interactiveshell.py:2728: DtypeWarning: Columns (18) have mixed types. Specify dtype option on import or set low_memory=False.\n",
      "  interactivity=interactivity, compiler=compiler, result=result)\n"
     ]
    }
   ],
   "source": [
    "# 读入数据\n",
    "dateparse = lambda x: pd.datetime.strptime(x, '%d-%b-%y')\n",
    "data = pd.read_csv('Train.csv', index_col = 'ID', encoding = 'latin1', parse_dates = ['Lead_Creation_Date'], date_parser=dateparse)\n",
    "test = pd.read_csv('Test.csv', index_col = 'ID', parse_dates = ['Lead_Creation_Date'], encoding = 'latin1', date_parser=dateparse)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Index: 87020 entries, ID000002C20 to ID124821V10\n",
      "Data columns (total 25 columns):\n",
      "Gender                   87020 non-null object\n",
      "City                     86017 non-null object\n",
      "Monthly_Income           87020 non-null int64\n",
      "DOB                      87020 non-null object\n",
      "Lead_Creation_Date       87020 non-null datetime64[ns]\n",
      "Loan_Amount_Applied      86949 non-null float64\n",
      "Loan_Tenure_Applied      86949 non-null float64\n",
      "Existing_EMI             86949 non-null float64\n",
      "Employer_Name            86949 non-null object\n",
      "Salary_Account           75256 non-null object\n",
      "Mobile_Verified          87020 non-null object\n",
      "Var5                     87020 non-null int64\n",
      "Var1                     87019 non-null object\n",
      "Loan_Amount_Submitted    52407 non-null float64\n",
      "Loan_Tenure_Submitted    52407 non-null float64\n",
      "Interest_Rate            27726 non-null float64\n",
      "Processing_Fee           27420 non-null float64\n",
      "EMI_Loan_Submitted       27727 non-null object\n",
      "Filled_Form              87020 non-null object\n",
      "Device_Type              87020 non-null object\n",
      "Var2                     87020 non-null object\n",
      "Source                   87020 non-null object\n",
      "Var4                     87020 non-null int64\n",
      "LoggedIn                 87020 non-null int64\n",
      "Disbursed                87019 non-null float64\n",
      "dtypes: datetime64[ns](1), float64(8), int64(4), object(12)\n",
      "memory usage: 17.3+ MB\n"
     ]
    }
   ],
   "source": [
    "data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Index: 37717 entries, ID000026A10 to ID124823X30\n",
      "Data columns (total 23 columns):\n",
      "Gender                   37717 non-null object\n",
      "City                     37319 non-null object\n",
      "Monthly_Income           37717 non-null int64\n",
      "DOB                      37717 non-null object\n",
      "Lead_Creation_Date       37717 non-null datetime64[ns]\n",
      "Loan_Amount_Applied      37677 non-null float64\n",
      "Loan_Tenure_Applied      37677 non-null float64\n",
      "Existing_EMI             37677 non-null float64\n",
      "Employer_Name            37675 non-null object\n",
      "Salary_Account           32680 non-null object\n",
      "Mobile_Verified          37717 non-null object\n",
      "Var5                     37717 non-null int64\n",
      "Var1                     37717 non-null object\n",
      "Loan_Amount_Submitted    22795 non-null float64\n",
      "Loan_Tenure_Submitted    22795 non-null float64\n",
      "Interest_Rate            12110 non-null float64\n",
      "Processing_Fee           11971 non-null float64\n",
      "EMI_Loan_Submitted       12110 non-null float64\n",
      "Filled_Form              37717 non-null object\n",
      "Device_Type              37717 non-null object\n",
      "Var2                     37717 non-null object\n",
      "Source                   37717 non-null object\n",
      "Var4                     37717 non-null int64\n",
      "dtypes: datetime64[ns](1), float64(8), int64(3), object(11)\n",
      "memory usage: 6.9+ MB\n"
     ]
    }
   ],
   "source": [
    "test.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 可以观察到训练集和测试集的两组数据都没有缺失值，测试集数据比训练集数据少两个特征，LoggedIn和Disbursed。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Gender</th>\n",
       "      <th>City</th>\n",
       "      <th>Monthly_Income</th>\n",
       "      <th>DOB</th>\n",
       "      <th>Lead_Creation_Date</th>\n",
       "      <th>Loan_Amount_Applied</th>\n",
       "      <th>Loan_Tenure_Applied</th>\n",
       "      <th>Existing_EMI</th>\n",
       "      <th>Employer_Name</th>\n",
       "      <th>Salary_Account</th>\n",
       "      <th>...</th>\n",
       "      <th>Interest_Rate</th>\n",
       "      <th>Processing_Fee</th>\n",
       "      <th>EMI_Loan_Submitted</th>\n",
       "      <th>Filled_Form</th>\n",
       "      <th>Device_Type</th>\n",
       "      <th>Var2</th>\n",
       "      <th>Source</th>\n",
       "      <th>Var4</th>\n",
       "      <th>LoggedIn</th>\n",
       "      <th>Disbursed</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ID</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>ID000002C20</th>\n",
       "      <td>Female</td>\n",
       "      <td>Delhi</td>\n",
       "      <td>20000</td>\n",
       "      <td>23-May-78</td>\n",
       "      <td>2015-05-15</td>\n",
       "      <td>300000.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>CYBOSOL</td>\n",
       "      <td>HDFC Bank</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>Web-browser</td>\n",
       "      <td>G</td>\n",
       "      <td>S122</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ID000004E40</th>\n",
       "      <td>Male</td>\n",
       "      <td>Mumbai</td>\n",
       "      <td>35000</td>\n",
       "      <td>7-Oct-85</td>\n",
       "      <td>2015-05-04</td>\n",
       "      <td>200000.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>TATA CONSULTANCY SERVICES LTD (TCS)</td>\n",
       "      <td>ICICI Bank</td>\n",
       "      <td>...</td>\n",
       "      <td>13.25</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6762.9</td>\n",
       "      <td>N</td>\n",
       "      <td>Web-browser</td>\n",
       "      <td>G</td>\n",
       "      <td>S122</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ID000007H20</th>\n",
       "      <td>Male</td>\n",
       "      <td>Panchkula</td>\n",
       "      <td>22500</td>\n",
       "      <td>10-Oct-81</td>\n",
       "      <td>2015-05-19</td>\n",
       "      <td>600000.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>ALCHEMIST HOSPITALS LTD</td>\n",
       "      <td>State Bank of India</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>Web-browser</td>\n",
       "      <td>B</td>\n",
       "      <td>S143</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ID000008I30</th>\n",
       "      <td>Male</td>\n",
       "      <td>Saharsa</td>\n",
       "      <td>35000</td>\n",
       "      <td>30-Nov-87</td>\n",
       "      <td>2015-05-09</td>\n",
       "      <td>1000000.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>BIHAR GOVERNMENT</td>\n",
       "      <td>State Bank of India</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>Web-browser</td>\n",
       "      <td>B</td>\n",
       "      <td>S143</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ID000009J40</th>\n",
       "      <td>Male</td>\n",
       "      <td>Bengaluru</td>\n",
       "      <td>100000</td>\n",
       "      <td>17-Feb-84</td>\n",
       "      <td>2015-05-20</td>\n",
       "      <td>500000.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>25000.0</td>\n",
       "      <td>GLOBAL EDGE SOFTWARE</td>\n",
       "      <td>HDFC Bank</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>Web-browser</td>\n",
       "      <td>B</td>\n",
       "      <td>S134</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 25 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             Gender       City  Monthly_Income        DOB Lead_Creation_Date  \\\n",
       "ID                                                                             \n",
       "ID000002C20  Female      Delhi           20000  23-May-78         2015-05-15   \n",
       "ID000004E40    Male     Mumbai           35000   7-Oct-85         2015-05-04   \n",
       "ID000007H20    Male  Panchkula           22500  10-Oct-81         2015-05-19   \n",
       "ID000008I30    Male    Saharsa           35000  30-Nov-87         2015-05-09   \n",
       "ID000009J40    Male  Bengaluru          100000  17-Feb-84         2015-05-20   \n",
       "\n",
       "             Loan_Amount_Applied  Loan_Tenure_Applied  Existing_EMI  \\\n",
       "ID                                                                    \n",
       "ID000002C20             300000.0                  5.0           0.0   \n",
       "ID000004E40             200000.0                  2.0           0.0   \n",
       "ID000007H20             600000.0                  4.0           0.0   \n",
       "ID000008I30            1000000.0                  5.0           0.0   \n",
       "ID000009J40             500000.0                  2.0       25000.0   \n",
       "\n",
       "                                   Employer_Name       Salary_Account  \\\n",
       "ID                                                                      \n",
       "ID000002C20                              CYBOSOL            HDFC Bank   \n",
       "ID000004E40  TATA CONSULTANCY SERVICES LTD (TCS)           ICICI Bank   \n",
       "ID000007H20              ALCHEMIST HOSPITALS LTD  State Bank of India   \n",
       "ID000008I30                     BIHAR GOVERNMENT  State Bank of India   \n",
       "ID000009J40                 GLOBAL EDGE SOFTWARE            HDFC Bank   \n",
       "\n",
       "               ...    Interest_Rate  Processing_Fee EMI_Loan_Submitted  \\\n",
       "ID             ...                                                       \n",
       "ID000002C20    ...              NaN             NaN                NaN   \n",
       "ID000004E40    ...            13.25             NaN             6762.9   \n",
       "ID000007H20    ...              NaN             NaN                NaN   \n",
       "ID000008I30    ...              NaN             NaN                NaN   \n",
       "ID000009J40    ...              NaN             NaN                NaN   \n",
       "\n",
       "             Filled_Form  Device_Type  Var2  Source Var4 LoggedIn Disbursed  \n",
       "ID                                                                           \n",
       "ID000002C20            N  Web-browser     G    S122    1        0       0.0  \n",
       "ID000004E40            N  Web-browser     G    S122    3        0       0.0  \n",
       "ID000007H20            N  Web-browser     B    S143    1        0       0.0  \n",
       "ID000008I30            N  Web-browser     B    S143    3        0       0.0  \n",
       "ID000009J40            N  Web-browser     B    S134    3        1       0.0  \n",
       "\n",
       "[5 rows x 25 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Gender</th>\n",
       "      <th>City</th>\n",
       "      <th>Monthly_Income</th>\n",
       "      <th>DOB</th>\n",
       "      <th>Lead_Creation_Date</th>\n",
       "      <th>Loan_Amount_Applied</th>\n",
       "      <th>Loan_Tenure_Applied</th>\n",
       "      <th>Existing_EMI</th>\n",
       "      <th>Employer_Name</th>\n",
       "      <th>Salary_Account</th>\n",
       "      <th>...</th>\n",
       "      <th>Loan_Amount_Submitted</th>\n",
       "      <th>Loan_Tenure_Submitted</th>\n",
       "      <th>Interest_Rate</th>\n",
       "      <th>Processing_Fee</th>\n",
       "      <th>EMI_Loan_Submitted</th>\n",
       "      <th>Filled_Form</th>\n",
       "      <th>Device_Type</th>\n",
       "      <th>Var2</th>\n",
       "      <th>Source</th>\n",
       "      <th>Var4</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ID</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>ID000026A10</th>\n",
       "      <td>Male</td>\n",
       "      <td>Dehradun</td>\n",
       "      <td>21500</td>\n",
       "      <td>3-Apr-87</td>\n",
       "      <td>2015-05-05</td>\n",
       "      <td>100000.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>APTARA INC</td>\n",
       "      <td>ICICI Bank</td>\n",
       "      <td>...</td>\n",
       "      <td>100000.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>1000.0</td>\n",
       "      <td>2649.39</td>\n",
       "      <td>N</td>\n",
       "      <td>Web-browser</td>\n",
       "      <td>B</td>\n",
       "      <td>S122</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ID000054C40</th>\n",
       "      <td>Male</td>\n",
       "      <td>Mumbai</td>\n",
       "      <td>42000</td>\n",
       "      <td>12-May-80</td>\n",
       "      <td>2015-05-01</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>ATUL LTD</td>\n",
       "      <td>Axis Bank</td>\n",
       "      <td>...</td>\n",
       "      <td>690000.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>13800.0</td>\n",
       "      <td>19849.90</td>\n",
       "      <td>Y</td>\n",
       "      <td>Mobile</td>\n",
       "      <td>C</td>\n",
       "      <td>S133</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ID000066O10</th>\n",
       "      <td>Female</td>\n",
       "      <td>Jaipur</td>\n",
       "      <td>10000</td>\n",
       "      <td>19-Sep-89</td>\n",
       "      <td>2015-05-01</td>\n",
       "      <td>300000.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>SHAREKHAN PVT LTD</td>\n",
       "      <td>ICICI Bank</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>Web-browser</td>\n",
       "      <td>B</td>\n",
       "      <td>S133</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ID000110G00</th>\n",
       "      <td>Female</td>\n",
       "      <td>Chennai</td>\n",
       "      <td>14650</td>\n",
       "      <td>15-Aug-91</td>\n",
       "      <td>2015-05-01</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>MAERSK GLOBAL SERVICE CENTRES</td>\n",
       "      <td>HDFC Bank</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>Mobile</td>\n",
       "      <td>C</td>\n",
       "      <td>S133</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ID000113J30</th>\n",
       "      <td>Male</td>\n",
       "      <td>Chennai</td>\n",
       "      <td>23400</td>\n",
       "      <td>22-Jul-87</td>\n",
       "      <td>2015-05-01</td>\n",
       "      <td>100000.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>5000.0</td>\n",
       "      <td>SCHAWK</td>\n",
       "      <td>Axis Bank</td>\n",
       "      <td>...</td>\n",
       "      <td>100000.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>Web-browser</td>\n",
       "      <td>B</td>\n",
       "      <td>S143</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 23 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             Gender      City  Monthly_Income        DOB Lead_Creation_Date  \\\n",
       "ID                                                                            \n",
       "ID000026A10    Male  Dehradun           21500   3-Apr-87         2015-05-05   \n",
       "ID000054C40    Male    Mumbai           42000  12-May-80         2015-05-01   \n",
       "ID000066O10  Female    Jaipur           10000  19-Sep-89         2015-05-01   \n",
       "ID000110G00  Female   Chennai           14650  15-Aug-91         2015-05-01   \n",
       "ID000113J30    Male   Chennai           23400  22-Jul-87         2015-05-01   \n",
       "\n",
       "             Loan_Amount_Applied  Loan_Tenure_Applied  Existing_EMI  \\\n",
       "ID                                                                    \n",
       "ID000026A10             100000.0                  3.0           0.0   \n",
       "ID000054C40                  0.0                  0.0           0.0   \n",
       "ID000066O10             300000.0                  2.0           0.0   \n",
       "ID000110G00                  0.0                  0.0           0.0   \n",
       "ID000113J30             100000.0                  1.0        5000.0   \n",
       "\n",
       "                             Employer_Name Salary_Account ...   \\\n",
       "ID                                                        ...    \n",
       "ID000026A10                     APTARA INC     ICICI Bank ...    \n",
       "ID000054C40                       ATUL LTD      Axis Bank ...    \n",
       "ID000066O10              SHAREKHAN PVT LTD     ICICI Bank ...    \n",
       "ID000110G00  MAERSK GLOBAL SERVICE CENTRES      HDFC Bank ...    \n",
       "ID000113J30                         SCHAWK      Axis Bank ...    \n",
       "\n",
       "            Loan_Amount_Submitted  Loan_Tenure_Submitted Interest_Rate  \\\n",
       "ID                                                                       \n",
       "ID000026A10              100000.0                    3.0          20.0   \n",
       "ID000054C40              690000.0                    5.0          24.0   \n",
       "ID000066O10                   NaN                    NaN           NaN   \n",
       "ID000110G00                   NaN                    NaN           NaN   \n",
       "ID000113J30              100000.0                    2.0           NaN   \n",
       "\n",
       "             Processing_Fee  EMI_Loan_Submitted  Filled_Form  Device_Type  \\\n",
       "ID                                                                          \n",
       "ID000026A10          1000.0             2649.39            N  Web-browser   \n",
       "ID000054C40         13800.0            19849.90            Y       Mobile   \n",
       "ID000066O10             NaN                 NaN            N  Web-browser   \n",
       "ID000110G00             NaN                 NaN            N       Mobile   \n",
       "ID000113J30             NaN                 NaN            N  Web-browser   \n",
       "\n",
       "             Var2 Source Var4  \n",
       "ID                             \n",
       "ID000026A10     B   S122    3  \n",
       "ID000054C40     C   S133    5  \n",
       "ID000066O10     B   S133    1  \n",
       "ID000110G00     C   S133    1  \n",
       "ID000113J30     B   S143    1  \n",
       "\n",
       "[5 rows x 23 columns]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1d4e1646ef0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Disbursed 分布，查看各类样本是否均衡\n",
    "sns.countplot(data.Disbursed);\n",
    "pyplot.xlabel('Disbursed');\n",
    "pyplot.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 通过观察train.csv 和 test.csv中的数据，以及由题目的字段说明，我们可知，Gender、City、Employer_Name、Salary_Account、Mobile_Verified、Var1、Filled_Form、Device_Type、Var2、Source这些特征的数据，都属于非数值型的分类数据，需要对这些特征的数据进行编码。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.2 特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将 Lead_Creation_Date & DOB 的日期格式转化为整型的数字\n",
    "def fixDates(data):\n",
    "    data['DOB_yr'] = [item.split('-')[2] for item in data['DOB']]\n",
    "    data.DOB_yr = '19' + data.DOB_yr\n",
    "    data['DOB_mon'] = [item.split('-')[1] for item in data['DOB']]\n",
    "    data['DOB_day'] = [item.split('-')[0] for item in data['DOB']]\n",
    "    data.DOB = data.apply(lambda x: pd.datetime.strptime(\"{0} {1} {2} 00:00:00\".format(x['DOB_yr'],x['DOB_mon'], x['DOB_day']), \"%Y %b %d %H:%M:%S\"),axis=1)\n",
    "\n",
    "    # drop extra features\n",
    "    data.drop( [ 'DOB_mon', 'DOB_day' ] , axis=1, inplace=True) # 'DOB_yr', \n",
    "    data.DOB_yr = [int(x) for x in data.DOB_yr]\n",
    "\n",
    "    # convert dates to ordinal\n",
    "    data['Lead_Creation_Date'] = data['Lead_Creation_Date'].apply(lambda x: x.toordinal())    \n",
    "    data['DOB'] = data['DOB'].apply(lambda x: x.toordinal())  \n",
    "     \n",
    "    \n",
    "    return data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def dictMap(listOfMajors, non_major):\n",
    "    mapped_dict = {}\n",
    "    for i, major in enumerate(reversed(listOfMajors)):\n",
    "        mapped_dict[major] = (i+1)\n",
    "    mapped_dict[non_major] = 0\n",
    "    return mapped_dict\n",
    "\n",
    "def dictMap0(listOfMajors):\n",
    "    mapped_dict = {}\n",
    "    for i, major in enumerate(reversed(listOfMajors)):\n",
    "        mapped_dict[major] = i\n",
    "    return mapped_dict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将LoggIn和Disbursed两个目标变量添加到test\n",
    "test['LoggedIn'] = 9999\n",
    "test['Disbursed'] = 9999\n",
    "    \n",
    "    # 对训练集和测试集数据进行集中处理\n",
    "combined = pd.concat( [ data, test ] )    \n",
    "    \n",
    "combined = fixDates(combined)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 处理训练集中的缺失值和空值,清楚错误值\n",
    "combined = combined.apply(lambda x: np.NaN if str(x).isspace() else x)\n",
    "combined.fillna(9999,inplace= True)\n",
    "combined['EMI_Loan_Submitted'] = combined['EMI_Loan_Submitted'].replace('N',0) # 替换这一列中的一个错误值N\n",
    "#combined = combined.dropna(axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    " # 将各个特征进行编码  \n",
    "    \n",
    "    # Gender - Female = 0, Male = 1\n",
    "combined['Gender'] = combined['Gender'].map( {'Female': 0, 'Male': 1} ).astype(int)\n",
    "    \n",
    "    # Filled_Form - N = 0, Y = 1  \n",
    "# combined['Filled_Form'] = combined['Filled_Form'].map( {'N': 0, 'Y': 1} ).astype(int)\n",
    "Filled_Form_le = LabelEncoder()\n",
    "Filled_Form_labels = Filled_Form_le.fit_transform(combined['Filled_Form'])\n",
    "combined['Filled_Form'] = Filled_Form_labels\n",
    "    \n",
    "    # Device_Type - Mobile = 0, Web-browser = 1\n",
    "# combined['Device_Type'] = combined['Device_Type'].map( {'Mobile': 0, 'Web-browser': 1} ).astype(int)\n",
    "Device_Type_le = LabelEncoder()\n",
    "Device_Type_labels = Device_Type_le.fit_transform(combined['Device_Type'])\n",
    "combined['Device_Type'] = Device_Type_labels\n",
    "    \n",
    "    # Mobile_Verified - N = 0, Y = 1\n",
    "#combined['Mobile_Verified'] = combined['Mobile_Verified'].map( {'N': 0, 'Y': 1} ).astype(int)\n",
    "Mobile_Verified_le = LabelEncoder()\n",
    "Mobile_Verified_labels = Mobile_Verified_le.fit_transform(combined['Mobile_Verified'])\n",
    "combined['Mobile_Verified'] = Mobile_Verified_labels\n",
    "    \n",
    "    # City\n",
    "city_counts = data.City.value_counts()\n",
    "major_cites = city_counts.index[:11]\n",
    "combined.loc[ ~combined['City'].isin(major_cites), 'City' ] = 'Non-major city'\n",
    "mapped_cities = dictMap(major_cites, 'Non-major city')\n",
    "combined['City'] = combined['City'].map( mapped_cities ).astype(int)\n",
    "    \n",
    "    # Employer_Name\n",
    "    # 清除不在TCS中的名字 \n",
    "data.loc[ data.Employer_Name.isin( ['TATA CONSALTANCY SERVICES', 'TATA CONSULTANCY SERVICE', 'TATA CONSULTANCY SERVICES', \n",
    "                                        'TATA CONSULTANCY SERVICES LIMITED', 'TATA CONSULTANCY SERVICES LTD (TCS)CONSUL'] ) , 'Employer_Name' ] = 'TATA CONSULTANCY SERVICES LTD (TCS)'\n",
    "combined.loc[ combined.Employer_Name.isin( ['TATA CONSALTANCY SERVICES', 'TATA CONSULTANCY SERVICE', 'TATA CONSULTANCY SERVICES', \n",
    "                                        'TATA CONSULTANCY SERVICES LIMITED', 'TATA CONSULTANCY SERVICES LTD (TCS)CONSUL'] ) , 'Employer_Name' ] = 'TATA CONSULTANCY SERVICES LTD (TCS)'\n",
    "     \n",
    "    # 按照Disbursed重新划分名字\n",
    "employer_groups = data.groupby('Employer_Name')['Disbursed'].sum()\n",
    "major_employers = list(employer_groups.sort_values()[-20:].index)\n",
    "major_employers.remove('0')\n",
    "major_employers.remove('TYPE SLOWLY FOR AUTO FILL')\n",
    "combined.loc[ ~combined['Employer_Name'].isin(major_employers), 'Employer_Name' ] = 'Non-major employer'\n",
    "    \n",
    "mapped_employers = dictMap(major_employers, 'Non-major employer')\n",
    "combined['Employer_Name'] = combined['Employer_Name'].map( mapped_employers ).astype(int)\n",
    "    \n",
    "    # Salary_Account\n",
    "bank_counts = data.Salary_Account.value_counts()\n",
    "major_banks = list(bank_counts.index[:20])\n",
    "combined.loc[ ~combined['Salary_Account'].isin(major_banks), 'Salary_Account' ] = 'Non-major bank'\n",
    "mapped_banks = dictMap(major_banks, 'Non-major bank')\n",
    "combined['Salary_Account'] = combined['Salary_Account'].map( mapped_banks ).astype(int)\n",
    "    \n",
    "    # Var1\n",
    "var1_counts = data.Var1.value_counts()\n",
    "major_var1 = list(var1_counts.index[:7]) # \n",
    "combined.loc[ ~combined['Var1'].isin(major_var1), 'Var1' ] = 'Non-major var1'\n",
    "mapped_var1 = dictMap(major_var1, 'Non-major var1')\n",
    "combined['Var1'] = combined['Var1'].map( mapped_var1 ).astype(int)\n",
    "    \n",
    "    # Var2\n",
    "var2_counts = data.Var2.value_counts()\n",
    "major_var2 = list(var2_counts.index)\n",
    "mapped_var2 = dictMap0(major_var2)\n",
    "combined['Var2'] = combined['Var2'].map( mapped_var2 ).astype(int)\n",
    "    \n",
    "    # Source\n",
    "source_counts = data.Source.value_counts()\n",
    "major_source = list(source_counts.index[:7])\n",
    "combined.loc[ ~combined['Source'].isin(major_source), 'Source' ] = 'Non-major source'\n",
    "mapped_source = dictMap(major_source, 'Non-major source')\n",
    "combined['Source'] = combined['Source'].map( mapped_source ).astype(int)\n",
    "\n",
    "    # 其他几个特征编码\n",
    "combined.Monthly_Income = combined.Monthly_Income.apply(np.sqrt) \n",
    "    \n",
    "combined.Loan_Amount_Applied = combined.Loan_Amount_Applied.apply(np.sqrt)\n",
    "    \n",
    "combined.Existing_EMI = [np.power(x, (float(1)/3)) for x in combined.Existing_EMI ] \n",
    "    \n",
    "combined.Loan_Amount_Submitted = combined.Loan_Amount_Submitted.apply(np.sqrt)\n",
    "    \n",
    "combined.DOB_yr = [np.log(x + 1) for x in combined.DOB_yr ] \n",
    "    \n",
    "combined.Processing_Fee = combined.Processing_Fee.apply(np.sqrt)\n",
    "    \n",
    "\n",
    "    \n",
    " "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "#combined =combined.fillna(9999,inplace=True)\n",
    "combined['EMI_Loan_Submitted'] = combined['EMI_Loan_Submitted'].replace('N',0) # 替换这一列中的一个错误值N"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\ipykernel_launcher.py:6: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  \n"
     ]
    }
   ],
   "source": [
    "    # 把数据再分开\n",
    "data = combined.loc[ combined.Disbursed != 9999 ]\n",
    "test = combined.loc[ combined.Disbursed == 9999 ]\n",
    "    \n",
    "# 将目标变量再从测试集中去除\n",
    "test.drop(['LoggedIn','Disbursed'], axis=1, inplace=True)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\ipykernel_launcher.py:4: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  after removing the cwd from sys.path.\n"
     ]
    }
   ],
   "source": [
    "# data['is_train'] = np.random.uniform(0, 1, len(data)) <= .80\n",
    "# train, validate = data[data['is_train']==True], data[data['is_train']==False]\n",
    "train = data.drop([ 'LoggedIn'], axis=1)\n",
    "data['is_train'] = np.random.uniform(0, 1, len(data)) <= .80\n",
    "validate = data[data['is_train']==False]\n",
    "    \n",
    "    # 重新设置特征\n",
    "features=[\n",
    "    #'DOB',\n",
    "    'DOB_yr', \n",
    "    'Lead_Creation_Date',\n",
    "    'Gender',\n",
    "    'City',\n",
    "    'Monthly_Income',\n",
    "    'Loan_Amount_Applied',\n",
    "    'Loan_Tenure_Applied',\n",
    "    'Existing_EMI',\n",
    "    'Employer_Name',\n",
    "    'Salary_Account',\n",
    "    'Mobile_Verified',\n",
    "    'Var5',\n",
    "    'Var1',\n",
    "    'Loan_Amount_Submitted',\n",
    "    'Loan_Tenure_Submitted',\n",
    "    'Interest_Rate',\n",
    "    'Processing_Fee',\n",
    "    'EMI_Loan_Submitted',\n",
    "    'Filled_Form',\n",
    "    'Device_Type',\n",
    "    'Var2',\n",
    "    'Source',\n",
    "    'Var4',\n",
    "#    'missingness'\n",
    "    ]\n",
    "    \n",
    "    # X and Y\n",
    "x = data[list(features)].values\n",
    "y = data['Disbursed'].values\n",
    "X_train = train[list(features)].values\n",
    "x_validate = validate[list(features)].values\n",
    "y_train = train['Disbursed'].values\n",
    "y_validate = validate['Disbursed'].values\n",
    "x_test = test[list(features)].values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[7.590346945602565, 735733, 0, ..., 6, 7, 1],\n",
       "       [7.593877844605118, 735722, 1, ..., 6, 7, 3],\n",
       "       [7.591861714889934, 735737, 1, ..., 7, 4, 1],\n",
       "       ...,\n",
       "       [7.587310506022615, 735810, 1, ..., 6, 7, 3],\n",
       "       [7.589841512182657, 735810, 1, ..., 6, 7, 3],\n",
       "       [7.5953872788539725, 735810, 1, ..., 6, 7, 4]], dtype=object)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0., 0., 0., ..., 0., 0., 0.])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2 利用XGBoost建立模型，并对模型的超参数调优"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.0 默认参数下调优"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    # xgb_param['num_class'] = 23\n",
    "    #extra = {'num_class': 23}\n",
    "    #xgb_param.update(extra)\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='auc', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='auc')\n",
    "    print('best n_estimators:' , len(cvresult['train-auc-mean']))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best n_estimators: 115\n"
     ]
    }
   ],
   "source": [
    "\n",
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.8,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        nthread=4,\n",
    "        objective= 'binary:logistic',\n",
    "        seed=27)\n",
    "\n",
    "modelfit(xgb1, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 最佳的n_estimators的值为 115"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1d4e16e3470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-auc-mean']\n",
    "test_stds = cvresult['test-auc-std'] \n",
    "        \n",
    "train_means = cvresult['train-auc-mean']\n",
    "train_stds = cvresult['train-auc-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs auc\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'auc' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1d4e16c26a0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[10:]\n",
    "# plot\n",
    "test_means = cvresult['test-auc-mean']\n",
    "test_stds = cvresult['test-auc-std'] \n",
    "        \n",
    "train_means = cvresult['train-auc-mean']\n",
    "train_stds = cvresult['train-auc-std'] \n",
    "\n",
    "x_axis = range(10,cvresult.shape[0]+10)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs auc\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'auc' )\n",
    "pyplot.savefig( 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.1 对TreeDepth和ChildWeight两个参数调优\n",
    "粗调，步长为2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': range(3, 10, 2), 'min_child_weight': range(1, 6, 2)}"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_depth = range(3,10,2)\n",
    "min_child_weight = range(1,6,2)\n",
    "param_test2_1 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.06304, std: 0.00097, params: {'max_depth': 3, 'min_child_weight': 1},\n",
       "  mean: -0.06308, std: 0.00107, params: {'max_depth': 3, 'min_child_weight': 3},\n",
       "  mean: -0.06306, std: 0.00106, params: {'max_depth': 3, 'min_child_weight': 5},\n",
       "  mean: -0.06281, std: 0.00140, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.06270, std: 0.00132, params: {'max_depth': 5, 'min_child_weight': 3},\n",
       "  mean: -0.06258, std: 0.00140, params: {'max_depth': 5, 'min_child_weight': 5},\n",
       "  mean: -0.06334, std: 0.00150, params: {'max_depth': 7, 'min_child_weight': 1},\n",
       "  mean: -0.06313, std: 0.00146, params: {'max_depth': 7, 'min_child_weight': 3},\n",
       "  mean: -0.06294, std: 0.00149, params: {'max_depth': 7, 'min_child_weight': 5},\n",
       "  mean: -0.06457, std: 0.00123, params: {'max_depth': 9, 'min_child_weight': 1},\n",
       "  mean: -0.06386, std: 0.00128, params: {'max_depth': 9, 'min_child_weight': 3},\n",
       "  mean: -0.06345, std: 0.00158, params: {'max_depth': 9, 'min_child_weight': 5}],\n",
       " {'max_depth': 5, 'min_child_weight': 5},\n",
       " -0.06257910841708901)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=115,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.8,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        nthread=4,\n",
    "        objective= 'binary:logistic',\n",
    "        seed=27)\n",
    "\n",
    "\n",
    "gsearch2_1 = GridSearchCV(xgb2_1, param_grid = param_test2_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_1.grid_scores_, gsearch2_1.best_params_,     gsearch2_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[mean: -0.06304, std: 0.00097, params: {'max_depth': 3, 'min_child_weight': 1},\n",
       " mean: -0.06308, std: 0.00107, params: {'max_depth': 3, 'min_child_weight': 3},\n",
       " mean: -0.06306, std: 0.00106, params: {'max_depth': 3, 'min_child_weight': 5},\n",
       " mean: -0.06281, std: 0.00140, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       " mean: -0.06270, std: 0.00132, params: {'max_depth': 5, 'min_child_weight': 3},\n",
       " mean: -0.06258, std: 0.00140, params: {'max_depth': 5, 'min_child_weight': 5},\n",
       " mean: -0.06334, std: 0.00150, params: {'max_depth': 7, 'min_child_weight': 1},\n",
       " mean: -0.06313, std: 0.00146, params: {'max_depth': 7, 'min_child_weight': 3},\n",
       " mean: -0.06294, std: 0.00149, params: {'max_depth': 7, 'min_child_weight': 5},\n",
       " mean: -0.06457, std: 0.00123, params: {'max_depth': 9, 'min_child_weight': 1},\n",
       " mean: -0.06386, std: 0.00128, params: {'max_depth': 9, 'min_child_weight': 3},\n",
       " mean: -0.06345, std: 0.00158, params: {'max_depth': 9, 'min_child_weight': 5}]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_1.grid_scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.062579 using {'max_depth': 5, 'min_child_weight': 5}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1d4e1736780>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_1.best_score_, gsearch2_1.best_params_))\n",
    "test_means = gsearch2_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_1.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(max_depth), len(min_child_weight))\n",
    "train_scores = np.array(train_means).reshape(len(max_depth), len(min_child_weight))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    pyplot.plot(min_child_weight, -test_scores[i], label= 'test_max_depth:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig('max_depth_vs_min_child_weght_1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.2 对TreeDepth和ChildWeight两个参数调优\n",
    "细调，步长为1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': [4, 5, 6], 'min_child_weight': [4, 5, 6]}"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_depth = [4,5,6]\n",
    "min_child_weight = [4,5,6]\n",
    "param_test2_2 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.06271, std: 0.00134, params: {'max_depth': 4, 'min_child_weight': 4},\n",
       "  mean: -0.06262, std: 0.00130, params: {'max_depth': 4, 'min_child_weight': 5},\n",
       "  mean: -0.06267, std: 0.00120, params: {'max_depth': 4, 'min_child_weight': 6},\n",
       "  mean: -0.06255, std: 0.00143, params: {'max_depth': 5, 'min_child_weight': 4},\n",
       "  mean: -0.06258, std: 0.00140, params: {'max_depth': 5, 'min_child_weight': 5},\n",
       "  mean: -0.06258, std: 0.00139, params: {'max_depth': 5, 'min_child_weight': 6},\n",
       "  mean: -0.06267, std: 0.00140, params: {'max_depth': 6, 'min_child_weight': 4},\n",
       "  mean: -0.06268, std: 0.00139, params: {'max_depth': 6, 'min_child_weight': 5},\n",
       "  mean: -0.06260, std: 0.00144, params: {'max_depth': 6, 'min_child_weight': 6}],\n",
       " {'max_depth': 5, 'min_child_weight': 4},\n",
       " -0.06255439948888682)"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_2 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=115,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.8,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        nthread=4,\n",
    "        objective= 'binary:logistic',\n",
    "        seed=27)\n",
    "\n",
    "\n",
    "gsearch2_2 = GridSearchCV(xgb2_2, param_grid = param_test2_2, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_2.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_2.grid_scores_, gsearch2_2.best_params_,     gsearch2_2.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[mean: -0.06271, std: 0.00134, params: {'max_depth': 4, 'min_child_weight': 4},\n",
       " mean: -0.06262, std: 0.00130, params: {'max_depth': 4, 'min_child_weight': 5},\n",
       " mean: -0.06267, std: 0.00120, params: {'max_depth': 4, 'min_child_weight': 6},\n",
       " mean: -0.06255, std: 0.00143, params: {'max_depth': 5, 'min_child_weight': 4},\n",
       " mean: -0.06258, std: 0.00140, params: {'max_depth': 5, 'min_child_weight': 5},\n",
       " mean: -0.06258, std: 0.00139, params: {'max_depth': 5, 'min_child_weight': 6},\n",
       " mean: -0.06267, std: 0.00140, params: {'max_depth': 6, 'min_child_weight': 4},\n",
       " mean: -0.06268, std: 0.00139, params: {'max_depth': 6, 'min_child_weight': 5},\n",
       " mean: -0.06260, std: 0.00144, params: {'max_depth': 6, 'min_child_weight': 6}]"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_2.grid_scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.062554 using {'max_depth': 5, 'min_child_weight': 4}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1d4eae089e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_2.best_score_, gsearch2_2.best_params_))\n",
    "test_means = gsearch2_2.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_2.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_2.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_2.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_2.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_2.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(min_child_weight), len(max_depth))\n",
    "train_scores = np.array(train_means).reshape(len(min_child_weight), len(max_depth))\n",
    "\n",
    "for i, value in enumerate(min_child_weight):\n",
    "    pyplot.plot(max_depth, test_scores[i], label= 'test_min_child_weight:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( '- Log Loss' )\n",
    "pyplot.savefig( 'max_depth_vs_min_child_weght2.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.3 对n_estimators进行调优\n",
    "max_depth=5,min_child_weight=4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best n_estimators: 115\n"
     ]
    }
   ],
   "source": [
    "xgb2_3 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.8,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        nthread=4,\n",
    "        objective= 'binary:logistic',\n",
    "        seed=27)\n",
    "\n",
    "modelfit(xgb1, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEXCAYAAACH/8KRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3XeYlOX18PHvmZntC7vALogUQUUFS1ARNWo0ViIqRqOCRsUS1GhiTIzRX3yNMSaaotFYSNAAamzEShRb7FFEFkUFFEWk7FJ2KdvblPP+cT+zzM52dmfr+VzXXDx97meGfc7cXVQVY4wxZmf5ujoBxhhjejYLJMYYY9rFAokxxph2sUBijDGmXSyQGGOMaRcLJMYYY9rFAokxxph2sUBiTBcSkf8TkQe7Oh3GtIcFEtMsEckUkTUicm7Mtn4isk5EfhCzbYKIvCAi20WkWERWiMjvRWSAt3+6iIRFpNx7rRaRKxKc9mNEJD+R79EWjaVHVf+gqpcm6P3WiMjxibi2MbEskJhmqWo5MAO4W0Ryvc1/AvJU9SkAEfk28BbwHrCPqmYDk4AQ8K2Yyy1U1UxVzQR+APxJRA7snDsxbSEiga5Og+lBVNVe9mrxBcwFHgeOAbYCQ2P2/Q+4p4XzpwP/i9v2IXBuzPppwHKgGBeYxsbsG+ttK/aOOS1m38nACqAMKACuBTKAKiAClHuvXZu4r/uAF73zFwF7tOLz2Ad4DdgGrATO3pn0ADcD//LOGwUocBGwHtgOXA4cAnzq3fu9Me+zB/CG931sAR4Fsr19j3jvVeW913Wt+IzXAL/y3qsGCHjrBd69rASOa+SzOAzYBPhjtn0f+NRbngjkAaXAZuDOJj7TAcALQJF37y8Aw+PSd3zMet1n560fCbzv3dt6YHpX/930lVeXJ8BePePl/ZFv9B5YF8VszwDCwDEtnD+dmEDiPRyLgb289b2ACuAEIAm4DlgFJHvrq4D/89aP9R5se3vnbgSOiknnQd7yMUB+C+maiwsGE70H56PAEy2ck+E9qC7yzjnI+1z2bWt6aDyQ/B1IBU4EqoHngMHAMKAQONo7fk/v80oBcoF3gLtirh3/4G3yM445fikwAkgD9vbuc9eY9DUaZIGvgRNi1v8NXO8tLwTO95YzgcOauMYg4EwgHejnXeO5Zu4n9rMb6f2fmObd2yBgfFf/3fSVlxVtmVZR1e24X7LpwDMxuwbgikg3RTeIyJ+8epIKEbkx5tjDvO3luNzII8BX3r5zgBdV9TVVDQJ/wT3Mvo37xZsJ3K6qtar6Bu7X6jTv3CAwTkT6q+p2Vf2ojbf3jKp+qKohXCAZ38LxpwBrVHWOqoa893saV1zXEen5napWq+qruAf/46paqKoFwLvAgQCqusr7vGpUtQi4Ezi6mes29xlH/U1V16tqFe4HQop3L0mqukZVv27i2o/jfR8i0g+XK3s85vPYU0RyVLVcVT9o7AKqulVVn1bVSlUtA37fwv3EOg/4r6o+rqpB71pLW3muaScLJKZVROSHuF+k/wX+GLNrO64IZWh0g6pep66e5FncL/aoD1Q1W10dyS7AvsAfvH27AmtjrhHB/Roe5u1b722LWuvtA/cr9mRgrYi8LSKHt/H2NsUsV+KCVnN2Aw71gmKxiBTjHmS7dFB6NscsVzWyngkgIoNF5AkRKRCRUuBfQE4z123uM45aH7N/FfAz3C//Qu+9dm3i2o8BZ4hICnAG8JGqRt/rElxu6AsRWSwipzR2ARFJF5F/iMha737eAbJFxN/MPUWNwOWKTBewQGJaJCKDgb8CPwIuA84Wke8AqGoFrl7hjLZcU1U3437Fn+pt2oB7QEffU3APhwJv3wgRif3/OtLbh6ouVtUpuOKf54B50bdpS5raYD3wthcUo69MVb2ik9Nzm3fNA1S1P/BDQGL2x79fc59xo+eo6mOqeqR3nlL/R0TscStwQep7wLm4wBLd95WqTsN9Hn8EnhKRjEYu8wtccdqh3v18J5pU798KXI44apeY5fW4OiPTBSyQmNa4F1dW/aaqbsSVrT/g/frEW79YRK73gg4iMhwY3dQFRWQQrkJ2ubdpHjBZRI4TkSTcQ6UGV3m6CPcQuU5EkkTkGFwAekJEkkXkPBHJ8oprSnFFMuB+yQ8SkawO+hyiXgD2EpHzvfQkicghIjK2k9PTD1eRXiwiw4Bfxu3fDOwes97cZ9yAiOwtIsd633M1LjcUbuxYz2PAT3EB4N8x1/mhiOR6OaBib3Nj1+nnvUexiAwEfhO3fykw1fu8J7CjKBFckeTxInK2iAREZJCItFREaTpKV1fS2Kt7v4DTcb9ks+O2vw78Pmb9UGAB7kFRDCzDlXEP8vZPxz08oi2WCnFl6INjrvF9XGunEuBtvMprb9++3rYS75jve9uTgZdxRWylwGLgyJjzZuNaNRXTdKutW2PWj6GFCnrvuL1xLb2KvOu/gatbaVN6aLyyPRBzfD4xDRlwxVc3xnwmS7zPcykuMOTHHDsFWOe917Wt+IzXUL8y+wBcXVYZrkHCC419hjHHj8QVc74Yt/1f3vddjvvhcHoT5++Ka0lWDnyJy/3WfR64oLjI2/8i8Dfqt9o6yttfisuhXNjVfz995SXeF2CMMcbsFCvaMsYY0y7We9WYRojIUcBLje1T1+rMGOOxoi1jjDHt0idyJDk5OTpq1KiuToYxxvQoS5Ys2aKquS0d1ycCyahRo8jLy+vqZBhjTI8iImtbPsoq240xxrSTBRJjjDHtYoHEGGNMuyQ0kIjIJBFZKSKrROT6RvbvJiKvi8inIvKWN6wGIjJeRBaKyHJv3zkx58wVkW9EZKn3smEQjDGmCyUskHgjdt6HG8RtHDBNRMbFHfYX4GFVPQC4BTcIHbgRWC9Q1X1xM+3dJSLZMef9UlXHey8bKtoYY7pQInMkE4FVqrpaVWuBJ3Bj/8QahxuzCeDN6H5V/VJVv/KWN+DG6WmxCZoxxpjOl8hAMoyYuQ1wg88NizvmE9zcDeAGk+vnjQpbR0Qm4gbCi51r4PdekddfY0agNcYY0wUSGUikkW3x3eivBY4WkY9xM6EVAKG6C4gMxc2id5HumNToBtx82YcAA3FzSjd8c5EZIpInInlFRUXtuhFjjDFNS2QgycdNmhM1HDcceR1V3aCqZ6jqgcCvvW0lACLSHzdU9I0aMzWnqm5UpwaYgytCa0BVZ6nqBFWdkJtrpWLGmD5mzmT36gSJ7Nm+GBgjIqNxOY2puJnT6ohIDrDNy23cgJurARFJxk3T+rCq/jvunKGqutGb3e103LwXxhhjAGafDMEKqC6FmhKoKYeUxI4zmrBAoqohEbkKeAXwA7NVdbmI3ALkqep83CRCt4mI4uZnvtI7/WzcLGuDRGS6t22610LrURHJxRWdLQUuT9Q9GGNMtzVnMqjC6ffCY9Ogthxy9oT1H4B6E1D6U6BkPQwem9Ck9InRfydMmKA21pYxpserKYMHT4CaUpfTqC3fETQQGHoAlG2GlP6Q2h8CqXDRizv9diKyRFUntHRcnxi00Rhjepw5kyESgu/eAPN/CtXFUFsJkSAgkJwBmYPhmBtg8T8hKR0ueblLkmqBxBhjuotQLTx4PFRth+rtLgfysNf9LikdDv8xrHoDUvrBxTHzrh18Ydek12OBxBhjusKDJ0GwHA66AN69A2orIFzrXgDJmZA1Ak69C4YdDGkD3PYTbum6NDfBAokxxiSSqstl1FbA/mfCB393dRuharf/pevAF4CkDDjsClj5MqRmwaWvdW2628ACiTHGdJRo0IhWhNeWg4grqgJ441bXkiolEzKHuFzH+c+4ZfH6cHfDHEdLLJAYY8zOmH0yhGrgiKvglRu9oOGDqm3eAQLJ6bDfD2DN/1zl+EULXP1GL2OBxBhjWqtss6v8rip2ASNcA/+ezo6gcSasec/lNC55FZJSuzrFncICiTHGxJozGTTimtrWlsPek2Dpozsqw8HlPFKzIW04nPkgDNkXAn13/FgLJMYYM/tkFzTGngKbPvU6+nnjxC5+0AWOlCw46hpY+njD5rd9nAUSY0zfEh3IUCOun8aIiZD/oevot+lTr6PfLi5YJPdzrad8MePbHn5l49ftwyyQGGN6p2jAmP4CPHCcK5o64CzYstItB6sAhW1fu+a26YPgopdg3gXuvHYMLdLX2FhbxpjeZfbJEKyE6hI3+q34oaJwx35/suuzkZzhmuH+6A23bBqwsbaMMb1bNMdx0YvwwPFuLKpd9of8RW6MKnB9NvY9HfLzXDHVRS/CY+fsOM90CAskxpieZfbJrmiqtsyNgvvX/dxQ6eDqPNIGuqKq1Cw3+u0Zs+qfbwGkw1kgMcZ0f/88yfUOHzw2br6NJNh7MviSXOCY8SbMPcXts4DRaSyQGGO6p5lHubqN9IFQuMJtq9oOGbkuaKT0c0VXZz9U/zwLIJ3OAokxputF6zvOftjlKErzXbGV+F1nv5pyFzwuext8/q5Nq2nAAokxpnNFp4gN17rWVeNOg83LXL3Hn3d3x/iTYcBo15/j/Ge6Nr2mRRZIjDGJEc1lTP0XzDnF9RYffjAULPGGUPe6HhSucJM2pQ+EI66Gjx91uQ/rOd5jWCAxxrRfbFPcB090TXGril0/jj+O2nGcRiApzQWNQCoE0lzASO2/4xjrOd7jWCAxxrRNNGiAK6I6/V6oKHJ1GjOPcMVU4OoyUrLh6F/BZ0+7Tn+Xvlo/6JheIaGBREQmAXcDfuBBVb09bv9uwGwgF9gG/FBV8719FwI3eofeqqoPedsPBuYCacAC4GrtC93zjelKdcVUj7qWUzVl7lVbBn870O0TH+TuA1kjIS3bdQAUgaN+7l5RFkB6nYQFEhHxA/cBJwD5wGIRma+qK2IO+wvwsKo+JCLHArcB54vIQOA3wARcQeoS79ztwExgBvABLpBMAqww1ZiO9s9JLpcx/lzY8pULGn8cRV3dRlI6pA2C794AS+a6YUcueM5yHH1QInMkE4FVqroaQESeAKYAsYFkHHCNt/wm8Jy3fBLwmqpu8859DZgkIm8B/VV1obf9YeB0LJAY0z7Rh/8Pn4JZ33VFVVXbXJ3Gq792Hf6SM+DIa2D5826MKp/3+JhwkXtFWQDpcxIZSIYB62PW84FD4475BDgTV/z1faCfiAxq4txh3iu/ke0NiMgMXM6FkSNH7vRNGNNrRYPH6fdD+WYXOP60u2uS6wtAxmBIz4EL5+8YEffo62D1227ZAobxJDKQSCPb4usyrgXuFZHpwDtAARBq5tzWXNNtVJ0FzAI3+m/rkmxMHxCdxKmiECq3wd0HuO3+ZDjoAli7sGHz29igYQHExElkIMkHRsSsDwc2xB6gqhuAMwBEJBM4U1VLRCQfOCbu3Le8aw5v7prGGE+90XFPcE1xRx0BG6L9OATSBsAxt8LSx1ydx+Q7ujTJpmdKZCBZDIwRkdG4nMZU4NzYA0QkB9imqhHgBlwLLoBXgD+IyABv/UTgBlXdJiJlInIYsAi4ALgngfdgTM8T7TlevR0qtrhWVdtWu32lG1w/jv7DISPHFWEdOsO9jNlJCQskqhoSkatwQcEPzFbV5SJyC5CnqvNxuY7bRERxRVtXeuduE5Hf4YIRwC3RinfgCnY0/30Jq2g3ZkfwOPmPbkj1sk0QrnGBYvghrtI8JctN4vTwFHeOFVGZDmIzJBrTU0WDx3d+Ds9e4fp3RIJuX0oW9BvqepDbUCNmJ9kMicb0VrGV5RVb4F9nulFy0wfCCbfA4tkQSLEch+k0FkiM6a5iK8ujwWPPY+tXlqcPhFPvhoX3u57l4891L2M6kQUSY7qbaACJhNzAh89fBQWL3bDrm5e5CZ2yhrs+Hr4AjD3VvYzpIhZIjOkOosHjlDuhJN91DqwpddvKNrrgkTYQLnkVnjzfbbeiK9NNWCAxpqtEK8u/dztsXwOVW+G+iW5fUoZrops2AGa8taOlVfpACyCm27FAYkxnmzPZFVuVbXJDk/zjKLc9NQtO/B188qSrLI/yByx4mG7NAokxnWH2ya5fx3euhe3fuCCiYUjpD5Nug6WPgz8JJv4Ilntjl1rwMD2EBRJjEmXOZDcP+eijdlSWPz7V7UvPgf7DXN2HjZ5rejgLJMZ0tNknu/qOsgI3+dPmz1zOI20AnD4TXrvJtbaygGF6CQskxnSEOZMhHIJxp+7o5xFIgQGj4dL/wrwL3XEjD4VLXunatBrTwSyQGLOzoq2ujr4WtnwJlVsg/wOX+8geBemD3FSzGTmW+zC9mgUSY9pqzmQIB6G0wLW6euT7boiSjFw47yl4+QZ3nAUP00dYIDGmNaIdBk+9y2t1tdGNqJsWM0SJzw9DD7AAYvocCyTGNCUaPC54Dso2uNzHvd5AqOm5kDUCktNh3GnuZUwfZYHEmHjRAAJurKuZR7iJoZIz4aTbYNkzNrquMTF8XZ0AY7qFOZPrD5ZYtgk2fQqFy1xHwtyxsMu34PAf1+91boyxHInpw2KHaY9OTfvUxZD/oav/CKS51lc/XuTm/IiynIgx9VggMX1PbNFVqAbevA0KPnQtsco2QsZgyBziirJEICnVgocxzbBAYvqG2NxHsNJNS1u1HapLoCAP0rIhcxe47B3XnNcY02oWSEzvFV90VbUNZk+CDR+57Ulp0H9XuPA/MP+nblsgecf5lgsxplUskJjeJ7boShU+neeCR6gKska6YUvSB0Eg1R0zaI/6QcMCiDFtktBWWyIySURWisgqEbm+kf0jReRNEflYRD4VkZO97eeJyNKYV0RExnv73vKuGd03OJH3YHqI2FZXAJGw6/ex4SN45keuriNnb/jpx27U3WgQMca0W8JyJCLiB+4DTgDygcUiMl9VV8QcdiMwT1Vnisg4YAEwSlUfBR71rrM/8LyqLo057zxVzUtU2k0PEVt0FVW00vU8L9/smvEmpcPZD8MH/3DBxCaJMqbDJTJHMhFYpaqrVbUWeAKYEneMAv295SxgQyPXmQY8nrBUmp6vpsy1ttq41E1VW1rgZhscsh8MPRDGTXFBxBiTEImsIxkGrI9ZzwcOjTvmZuBVEfkJkAEc38h1zqFhAJojImHgaeBWVdX4k0RkBjADYOTIkTuTftMd1Wt9Ve3m/LhzHNSUunnOT/qDm2HQn1z/PMuFGJMwiQwkjf0EjH/gTwPmquodInI48IiI7KeqEQARORSoVNVlMeecp6oFItIPF0jOBx5u8Eaqs4BZABMmTGgQaEwPU6/vRy28+As37wfAAWdD4RdutsHDr4QvFrjtFjyM6RSJDCT5wIiY9eE0LLq6BJgEoKoLRSQVyAEKvf1TiSvWUtUC798yEXkMV4TWIJCYXiC+DiQSdsVWpfmw8SPXaTBrBJwxq36gsQBiTKdKZB3JYmCMiIwWkWRcUJgfd8w64DgAERkLpAJF3roPOAtXt4K3LSAiOd5yEnAKsAzTe8S3vgKXAykvdC2wSta5KWuv/BAG7blj3KuLXrQAYkwXSViORFVDInIV8ArgB2ar6nIRuQXIU9X5wC+AB0TkGlyx1/SY+o7vAPmqujrmsinAK14Q8QP/BR5I1D2YLhascq2v/joOKopcHUjOXq4iPb7vhzGmy0gj9dS9zoQJEzQvz1oLd2vxI++m9oNNn7lte092TXpTB+xofWVBxPRR5/xjYb31Jy87vG5b7HLs/p0lIktUdUJLx1nPdtN16g1hEoHyTVC8zgWT4Yd4PdBzYNpjjfcZMaabaOlB3pH7uyMLJKZzxQcEjcDSx2DDx24Ik5QsGDgaLv2vVaCbZjX28O2MB3lH/uLvLSyQmM4RX4EerHadCEvyYd37rv4jd6ybA906DxpaHyhM17NAYhKnQe5DIVQNlVvhrv2hohCS+8E5j8D/7nYBxAZP7PE6+he/6f4skJiO1Vjw+OZd2LrKzf8RrnHb9zjWNelNyYK9ToL3/tY16TVt1hPL8E1iWSAxHSO+6Kq8CLavhYrN8NApID5IzYa0Ya711fnPWh1IN2WBwrSVBRLTNrE5jsZaUoVqXL3HXfu5Yqy0gTD5Dlg0C3z++tey4JFQO1sZbUxbWSAxrROf44gXCXnDlxS44qyDzodNy9ww7vudAYv/2Tnp7KOsjsF0JQskZudUbXe9zmtKYdZ33RDuGnH9PrJHwWn3WNFVgljzU9PdWCAxrRcJuRZXFVvgz3u6dV8AcveGzF0gI9eNwBtlwWOnWNGT6WkskJimRXMUp98PW1a6IKIR8KfAYT+G1W9DciZc+B/reb4TmqrDMKansUBinPg6kIte9IZtz4d7D4FIEDIGu1dKPzjxdy3Xm5g6VodhejMLJKahcC28/jsoWOyKr/Y/C7at2TFke2MsJ9KA5TJMX2GBpC+LLY4K17qiq6ptUFUM+YshfSD0Hw5nPth47sOCRx3LcZi+zAJJXxNflxGqhv9c7QIHCoFU6DcUpr8A83/a8HwLHnUsx2GMY4Gkr4jNUUTCsOwZKPrC5UI2feqmre031PX7EHETR8Xq4wHEchzGNM0CSV+hCtUlru9H1VZYvxB8SdBvFzdk+zOXNTynjwcPY0zrWCDpzeZMdgFkwkWwYYkrxvL5IWMI/OCf8MbvXe4ja/iOcyx4GNMu0VlnpRXTIagqhaXVVNSECEWUN78oZFtFLeGIElH3enTRWraU16AK9725ijVbK4hElIhCRJXLHsnjy81lAPzk8Y/5uqiciEI4ooQjysaSKoZmpSX0ni2Q9DaxdSBVxW6K2mcudUVWOXtB2iAXTEYdUX/ejz4eQGzioq6hqlTVhgmGIwTDEV7/fDObSqupDUWoCUUIhSNcOPtDVnoPyovnLuaLTWWoKtFJws//56K6/RfM/pDPN5YCOx7kU2ctZFlBCQBn/f19Vm4qQ4FIxF1jyn3vsbqwHAVO+us7rNla4Z0PgnDqPf/jmy0V+MS9/5eby4gohCIRwhHlyD++webSalRhrxtfojYUQQC/T/D5hKP+9AaFpTVEVDng5lcoqw4RO8H5xD+8Xrd80dzFDT6jXz+7rG75z6+sxC+C3yeIgE+ENVsqqQ5GAFhWUEJpdQifUHdcKJz46dQtkPRG4Vp4+lIoXOaa7J7xIOTNaThhlAUPwAJFW0UiSsh7hSPK+19vobiyllBE+fvbX7N2awXBsBIMRwhFlBP/+jbrtlYSURp9kI696eW65UseygNAgOSAjyS/j+KqILUh96AsKqshFIkgCOIdWFYdqttfUhUk4l1cIxEvvRDw+wBI8vuIqPtTCPh9iEB2WpIXNGBUTjpbK9yvf8UFupzMZNZurSCisLm0mqpgGL8IAb+PlIAwcfRA3v1yCz6B0w8axgufbKjLEURUOWS3gbzzVRECTD5gV15ZvqnuT1EQLj9mDx5+fw0Bn/CHM/bnpueX4YsJFvefdzA/ejgPAZ6YcTjT53xY7/toaVDOEQPT2/Ftt44Fkt5izmQIVro6kPJNburarBHudcBZsGSuO66PBw9oOARJXxP2nrSCe1hur6ilJhSmNqQ8+3E++dsrqanLESin3/ceq4vKCasy4dbX2FJeW+965z6wqG759pe+wCfugZ3kF5L9PnbPyWRreS0+iXmQeseLwA8PG8UTi9eR5BP+dNa3+N1/VpDkl7ocRUdOlfvYjw5rsP+hiyfWbfvH+RMa7J9z0cRmr3/n2ePrtt3wvbEsXVdcf/85O/bffNq+dTmmqPMP240XPtkAwIEjB5CeXP+xPKR/KmlJbuTstOS4EbS7iYQGEhGZBNwN+IEHVfX2uP0jgYeAbO+Y61V1gYiMAj4HVnqHfqCql3vnHAzMBdKABcDVGi2U7GuixVhT7oHNn7nKdHBDt1/8Mrzw8x3H9sEA0heHIFF1OYGqYJjqYITaUJibnl/GqsJyakIRDv7da2ytqB8IDvzda3XL1zz5CQDJfh/JAR+pST76pQaIqCsqOWHcEN79agsBnxDwuV/NN5+2H7e+sAK/T3hsxmFcElc88/fzD272QXrFMXvw1spCAA4aOYDkgK/DPxeTWAkLJCLiB+4DTgDygcUiMl9VV8QcdiMwT1Vnisg4XGAY5e37WlXHN3LpmcAM4APv+EnAS4m5i25OFSqK4O9HQbDKjbqbORj8yW4gxV4YPFqaY6OvNc8NhSO88cVm1m2rpKImxIRb/9sgUDy/dAPVwTDJAR8njBvC/1ZtIbaQ8+IjR/Pw+2tICvi4/7yDueGZT/HFFIM+csmhdZ/pbWcc0ODzPXyPQWSmukdJZooVcvRFifzWJwKrVHU1gIg8AUwBYgOJAv295SxgQ3MXFJGhQH9VXeitPwycTl8KJNFcyNRHYcuXUFkEI7/t6kUCqV2bNtPhQhFlxYZStlXUUhOK8Nv/LOfLzWXUhiLUhiMEw8rFc135eVqyn5P2Hcyib7aRluQjNclPSsDHvMu/Xffwv/3MhoHgoiNG8/KyTQDsOTizXhAxpjUSGUiGAetj1vOBQ+OOuRl4VUR+AmQAx8fsGy0iHwOlwI2q+q53zfy4aw5r7M1FZAYu58LIkSN3/i66o+pimHmECyJZI10v9PjZB3uovpzLqAmFmZe3nq+Lyqn2iqZCEeXkv71bd8y8xeuJqKuITk/2kxLw86ezDuDOV7/E7xP+fNa3+sRnZbqXRAaSxn7WxNdlTAPmquodInI48IiI7AdsBEaq6lavTuQ5Edm3ldd0G1VnAbMAJkyY0PPrUOZMdgMoFq+Fso0wcA/Y5VtuJN5eEER6+8NP1bVy+rqonNLqINW1YSqDYWqCEU695398samUYFhZuv5TAj4hPdnPgIxkUgM+rv/eWO5/axUpAR9PX/Ftps76oN61v71HDnf7vuqiOzMmsYEkHxgRsz6chkVXl+DqOFDVhSKSCuSoaiFQ421fIiJfA3t514zpPdfoNXuPaDHW9BfcZFLbV7sirH5D4bJ34LFzujZ97dTbK8Crg2FKqoLMeDiPJWuLCaty3B1v1+33CaQm+cnJTCY7LYm0ZD+zLpjATc8tq9eZbfIBQ3l44RqgdZ3cjOlsiQwki4ExIjIaKACmAufGHbMOOA6YKyJjgVSgSERygW2qGhaR3YExwGpV3SYiZSJyGLAIuABFlznvAAAcy0lEQVS4J4H30LVUoXo7PPBd2PIFJGVA7liXC0nJ7JGV6b01eKgq1cEIzy8tYM3WCkqqgnWdxIJhZVBmMmlJfn5+4l7c/+Yq0pL8JAd8iEi95qX77NLfgoXpcRIWSFQ1JCJXAa/gmvbOVtXlInILkKeq84FfAA+IyDW4Iqrpqqoi8h3gFhEJAWHgclXd5l36CnY0/32J3lrRrgpbv4KKQsgeCYPGuEmlLl7Q1SnbKb2t6Ko2FGFrRQ2lVSGOv/Ntvi4qRxWufmIpPoF+qUkM6ZdKVloSz191RF1x1JTxw3hs0bouTr0xHatVgcTLASxX1TJvvR8wTlUXNXeeqi7ANdGN3XZTzPIK4IhGznsaeLqJa+YB+7Um3T1StDjrgLNdEOk/DK5aAo98v2vT1Uq9se+GqrK9spaKmhD/9+xnfL6xlNLqEABpSX72zM2kvDpEerKf+847iN88X79oynIYprdrbY5kJnBQzHpFI9tMe8QO815bAS/9ClKzXN+QQHK3Kcbqa62qakIRLn0ojy83lwPw8rJNhCLKrtmp5GSkkJbsr9fhbuxQK5oyfU9rA4nE9h5X1YiIWM+jRIiEYctKVwdy+XvQb0invn1TuYjeGihihSPKqsIyiitrqQpGqKoNs7WihpSAn5ED0xnSP4V/x/TJMMY4rQ0Gq0Xkp7hcCMCPgdWJSVIfFq0XCVbCOf9KeBBpKUfRW4qm4qkqqhBWpbI2zG+eX8bH64qpDUc4/s536o4L+ISstCTmX3Uk1/77ky5MsTHdW2sDyeXA33BDmijwOl5nP9MO8dPelqyHyi2uOGvP4zr0rfra0OiqSkVNmMraEPe8/hVrtlZQE4xw7B1v8U1RRb3OR99sqSAjxc+QlBSuPWlv/vH216Qm+UnyRoztjNFTjenJWhVIvH4dUxOclr6toghK1rmWWf0b7azfZr01RxEViShVwTAvL9vIxpIqgmHl189+xsrNZZRVh+pGub3jtS/xi5Ac8LH3kH5U1YYJeHNFJPt9PH/VEVw0xw00aK2qjGm71rbamkMjPchV9eIOT1FvF58LAVj1uivSSukPg/ZsOG9IG/Tm4BFRpaw6RGlVkLP+/j55a7ejwOX/+ghwwx68vGwT1cEwA9OTyUoLkJka4MnLDueCf7o5HGb+8OAGubP4YbuNMW3T2r+gF2KWU4Hv05t7lHemqu3w+DQIpLnOhhfvXLeY3lQBXB0M8/zSAtZuraA6GOHcBz5g2YYSqmrDdZMW5fZPZZesVDJSAtx1znh+8/wy/D6pN0BhVEqg5w8h05c09iModlt0uTf9n+/pWlu0Va9Ph4g8Dvw3ISnqrWKb90ZVbYPCz2GX/SCQDv6kNl2yN+U+akMRtlXUUlReQ2VtuK5jX2qSn9pQBL8Iuf1SyEpLol9qEk9fsSNg7Dcsq24GPNN+rX2QJ2r/zqSzM9PXUffXmelPtJ3N048BetmQup1IFT6YCYUrIDkDLpgPT57fqlN7evBQdfUaz3yUz9qtFVTWhutNtpSR7JrazvzhQfx2/nJEpFf3U0mknX1QmcTqjZ91a+tIythRR6LAZuC6RCWqV9MIbPsaXr7ezWSYszekD2z00N7S4a+orIbNpdWUVAUpqw4Riig/n/cJPnFzaJw8bgjvf72VrLRAXX3FvrtmWce+NujqX6Smb2tt0VY/ERmIy4lEZ0/q+UOzJ1p8xXqwynU2rC2Ho66FtQvbVbHe3bhpXl2OY17eegq2V1FaHeTQP/yXiEJKwMeAdFc09Y/zD+bXz36GiDQ62ZKpzwKF6c5amyO5FLgaN2z7UuAwYCFwbOKS1stUFMHWVa5pUe4+cNz/q19v4gWb7lx0FYkoxVVBSqqCXPrQYpZtKCESge/d/S5rt1ZQG3ITMQFc99SngAseVxyzB+98WVSvddSYIf0sx9GE7vjdG9Oc1taRXA0cAnygqt8VkX2A3yYuWT1YY81737/HG/aknyvK6kFT4oYjysvLNrGqsJztlbVEFPw+oaC42vXNSBKGD0hjY3EVmSkB0pL8bl6N8yfwi38vxSfCL0/ah7w127v6VrqU1VGY3qy1gaRaVatFBBFJUdUvRGTvhKasN1B1nQxfvRHScyBnL5Du07ooWhTlKr1DBMNaNxf4dU99woqNpVTUhLj8X0sI+IRBGckMykyhf2qgXjPbBy6Y0KBoauSg9D4/97cFB9NXtDaQ5ItINvAc8JqIbMf6kbSseC2U5sOB58PW1Q3qQ86pvRGAJ0l8m/jK2hCVteG6ucAn3fUOKzeVocDRf36rwfFvriwChdzMFO48Zzx3/ffLPh8Y4rWlVZQxvVlrK9ujk2HcLCJvAlnAywlLVW/w8aMuiGTuAqfdA3NPAWD5xhIA9u2EJIQiEbZXBJly33t8VlBatz054OOA4VmUVAVJCfj4ybFjmPn21yT53DAiSX4fT8X00zhizxz+9rrNCR5lgcKY+trcj0RV3275qD6uphRe+JmbT2Tg7vVyIrcM+jPgciEdrao2zPbKWkqqXEupzaU1AOyRm8FuA9PJSksiJcmHL2561zMPHs68vPUJSFHPZrkMY1rHBhnqKNFK9lAtFH3uBl7MGFJXJxLNiTCo49/67S+L+KyghMraMADpyX6O3DOXD7/ZSmZKgAVXH1U31atpnAUNY3aeBZIOtm3jKrIjIXxTH4cFv6zbHs2JdJTS6iClVUE2llZz4ewPSQ34GDUonez0JFICfu44+1t1OY6+2szW6jCM6RwWSDpSqJbsyHaKfdkMHDKuw+tDqmrDFJXXsK2ilgNufhUAn8D139uH1z/f3Ocqwy1QGNM9WCDpSGUFCMoWfy4DaX99SHTY9DteXcnyDSWU17iiq+y0JH563BieX1pAZkqAy4/egze/KOyYe+hGLDgY0zMkNJCIyCTgbsAPPKiqt8ftHwk8BGR7x1yvqgtE5ATgdiAZqAV+qapveOe8BQwFqrzLnOhNvNW1wkEo20iJL5ugpLT7cvnbK1lWUEpVMMxXheWkJvkYMSCNnMwUkgM+rvzunrzzZVEHJLx7sYBhTM+TsEAiIn7gPuAEIB9YLCLzVXVFzGE3AvNUdaaIjAMWAKOALcCpqrpBRPYDXgFipw08T1XzEpX2nVG44RsGa4Qt/tx2X6u8OsTp971PbTjCnrkZPHvlEVz6ULe63Z1mxVHG9D6JzJFMBFap6moAEXkCmALEBhIF+nvLWXidHFX145hjlgOpXo/6mgSmt+2iLbWmPsqgyBZKpT81vvYNf7K1vIavt1QwfEAau2b1Jy3ZT7/Uts1T0h1ZoDCm90pkIBkGxHZOyAcOjTvmZuBVEfkJkAEc38h1zgQ+jgsic0QkDDwN3KqqDUYiFpEZwAyAkSMTPHXKe3fhI0Khf/BO14uoKgXFVRQUV5OZEuC5Hx/Bjx/9qOPT2k42x4UxJl4iA0ljTYjiH/jTgLmqeoeIHA48IiL7qWoEQET2Bf4InBhzznmqWiAi/XCB5Hzg4QZvpDoLmAUwYcKExA15H6qBD2ZS4sumxpe2U5fYUFzFV4XlbK8MkpuZzKicDAZltr+epSNZUDDGNCWRgSQfGBGzPpyG43NdAkwCUNWFIpIK5ACFIjIceBa4QFW/jp6gqgXev2Ui8hiuCK1BIOk0JesgEqbQP6RNp0UiSk0wzOayGo75y1sEQxFGDkxnl/4p3abfhwUPY0xrJDKQLAbGiMhooACYCpwbd8w64DhgroiMxU2aVeQNEPkicIOqvhc9WEQCQLaqbhGRJOAUunLu+GAllG+GQy8n+PF7LR8ejlBY5vqB7PubV6gKuua8Zxw4jNVF5aQk+ROdYqvsNsZ0uISNaa6qIeAqXIurz3Gts5aLyC0icpp32C+AH4nIJ8DjwHSvvuMqYE/g/4nIUu81GEgBXhGRT3ETbBUADyTqHlpUsh7E72Y7bO6wqiBfF5Xz8bpi8rdX4Rdh2sSRjBqUzv7DsrjznPEJDyJPXna4BQtjTEIktB+Jqi7ANemN3XZTzPIK4IhGzrsVuLWJyx7ckWncaaqEKrZR7utHdmbTTX6rg2G+f/97bC2vZUj/FAb3SyUt2c9Np45j+YaSDk+W5TKMMZ3NerbvrKIvCBCmQjLIpv5YWqrKuq2VbC6tZv32KvqnBthnl370T0tcM14LGsaYrtJ9puvrab55F4AKX2a9zRU1IT7JL+E7f36TNVsrSQn4mH/VkQkNIsYY05UsR7Kz1rxLLUkEqR8g8rdXEY4ot0zZl3/nrSctyc+Igekd9rZWdGWM6W4skOyMSATW/I8KX0a9Sasqa8MUVwUZlp3GBYeP4sVPN3bYW1rQMMZ0VxZIdkbR51C1jUr/8HqbN5VU4RMY0r9jOhNa8DDG9AQWSNpqzmQodf0qbxt4K0WBXXgSqA1F2FJeS26/FJL8VvVkjOk77InXRss3llBavAWyR1IU2KVu+6bSahQYmtW+QRuNMaansRxJW6mSrhUw6jTY7Dblb6+ksLSGgelJpLazY6EVZxljehoLJG2UotUECMOoI2EzhCPKZY8sAaFdrbMsgBhjeior2mqjdK10C7t9G1Xlmy0VrNhYyp65Ge3OjRhjTE9kgaSNUrWaMD7IHsnm0hq2VtRy7Yl7k52e3NVJM8aYLmFFW22UqtVUSyppChtK3PAnPz5mjxbnT7eJn4wxvZUFklZa/ocjQZV9tJoSXzbL1mwjGFZGDuw+84cYY0xXsKKtNkgiiJ8I1ZLK/E824BMYYEVaxpg+znIkbZCi1QDcl/ULFny2kQHpyfh9TedGrOjKGNMXWCBpg1QvkKwIDWN7ZZAxgzMbHGPBwxjT11ggaYNUrabQP4T1lQH6p0bITreh4Y0xxupI2iAlUs3awGi2VdQyab9d8FkluzHGWCBpLdEIKdTwpY4konDat4Z1dZKMMaZbsEDSSilagwCfR0YgwCGjB3R1kowxpltIaCARkUkislJEVonI9Y3sHykib4rIxyLyqYicHLPvBu+8lSJyUmuvmSjRFlvLQ8NJTfKTErDhUIwxBhIYSETED9wHfA8YB0wTkXFxh90IzFPVA4GpwP3eueO89X2BScD9IuJv5TU7zpzJ7oWraI8gfBEcTHqyBRFjjIlKZI5kIrBKVVerai3wBDAl7hgF+nvLWcAGb3kK8ISq1qjqN8Aq73qtuWZCpGo1VaRRFRYLJMYYEyORzX+HAetj1vOBQ+OOuRl4VUR+AmQAx8ec+0HcudHa7ZaumRApWs163ERW0UAS22fE+o8YY/qqROZIGmsbq3Hr04C5qjocOBl4RER8zZzbmmu6NxeZISJ5IpJXVNT8gIotqtxGEiFW61AA0pOt+40xxkQlMpDkAyNi1oezo+gq6hJgHoCqLgRSgZxmzm3NNfGuN0tVJ6jqhNzc3HbcBlD0BQDLIqMI+ITkgDV2M8aYqEQ+ERcDY0RktIgk4yrP58cdsw44DkBExuICSZF33FQRSRGR0cAY4MNWXrPjeYFkUXhvqx8xxpg4CSujUdWQiFwFvAL4gdmqulxEbgHyVHU+8AvgARG5BldENV1VFVguIvOAFUAIuFJVwwCNXTNR91CnaCVhfORFxjDIirWMMaaehD4VVXUBsCBu200xyyuAI5o49/fA71tzzURZvrEEgH19n1NGBkGSLEdijDFxrLC/NYpWspFBAGSkWCAxxphYFkha4NMwlG/i68iuBAiTmmSBxBhjYlkgaUF0aJRPI7szwrfFRvw1xpg4VnPcghStAWBheB9GBwqZfdnFXZwiY4zpXixH0oIUrUYDaSzTUYzyFXZ1cowxptuxQNKCFK2hKmsPFB8jfNu6OjnGGNPtWCBpQYrWUJQ6GoBhFkiMMaYBCyTN8GmYZIKs9Q9HgAdyO236E2OM6TEskDQjWtG+IrgrKUk+a7FljDGNsEDSjGgg+bB8MKk2I6IxxjTKAkkzUrxZET/YnmkdEY0xpgkWSJqRojVUkkZlSEhLso/KGGMaYx0Sm1Hkz2VNOAfAciTGGNME+5ndjCpfBot1LGCBxBhjmmKBpAX5kUFkJPtJ8luLLWOMaYwFkhYUhAeye24mYk1/jTGmURZIWlAQGcDonIyuToYxxnRbFkiaUat+CjWb3XMtkBhjTFMskDRjY2QAiliOxBhjmmGBpBkFkYEA7J6T2cUpMcaY7ssCSTPyvUAy2oq2jDGmSQkNJCIySURWisgqEWkwdK6I/FVElnqvL0Wk2Nv+3ZjtS0WkWkRO9/bNFZFvYvaNT1T6N0QGMlDKyEyxfpvGGNOUhD0hRcQP3AecAOQDi0VkvqquiB6jqtfEHP8T4EBv+5vAeG/7QGAV8GrM5X+pqk8lKu1RQQ0wyleU6LcxxpgeLZE/tScCq1R1NYCIPAFMAVY0cfw04DeNbP8B8JKqViYklc34Zfp8VAF+0tlvbYwxPUYii7aGAetj1vO9bQ2IyG7AaOCNRnZPBR6P2/Z7EfnUKxpLaeKaM0QkT0Tyiop2Pldh/RCNMaZ5iQwkjT2CtYljpwJPqWq43gVEhgL7A6/EbL4B2Ac4BBgI/KqxC6rqLFWdoKoTcnNz25p2Y4wxrZTIoq18YETM+nBgQxPHTgWubGT72cCzqhqMblDVjd5ijYjMAa7tgLS26MnLDu+MtzHGmB4nkTmSxcAYERktIsm4YDE//iAR2RsYACxs5BrTiCvW8nIpiBv86nRgWQen2xhjTBskLEeiqiERuQpXLOUHZqvqchG5BchT1WhQmQY8oar1ir1EZBQuR/N23KUfFZFcXNHZUuDyRN2DMcaYliW0g4SqLgAWxG27KW795ibOXUMjlfOqemzHpdAYY0x7Wc92Y4wx7WJdtptxy6A/A/BkF6fDGGO6M8uRGGOMaRcLJMYYY9rFAokxxph2sUBijDGmXSyQGGOMaRcLJMYYY9rFAokxxph2sUBijDGmXSyQGGOMaRcLJMYYY9rFAokxxph2sUBijDGmXSyQGGOMaRcb/bcZNr2uMca0zHIkxhhj2sUCiTHGmHaxQGKMMaZdLJAYY4xpFwskxhhj2iWhgUREJonIShFZJSLXN7L/ryKy1Ht9KSLFMfvCMfvmx2wfLSKLROQrEXlSRJITeQ/GGGOal7BAIiJ+4D7ge8A4YJqIjIs9RlWvUdXxqjoeuAd4JmZ3VXSfqp4Ws/2PwF9VdQywHbgkUfdgjDGmZYnMkUwEVqnqalWtBZ4ApjRz/DTg8eYuKCICHAs85W16CDi9A9JqjDFmJyUykAwD1ses53vbGhCR3YDRwBsxm1NFJE9EPhCRaLAYBBSraqgV15zhnZ9XVFTUnvswxhjTjET2bJdGtmkTx04FnlLVcMy2kaq6QUR2B94Qkc+A0tZeU1VnAbMARKRIRNa2Pun15ABbdvLc7qo33hP0zvvqjfcEvfO+euM97daagxIZSPKBETHrw4ENTRw7FbgydoOqbvD+XS0ibwEHAk8D2SIS8HIlzV0z9lq5bU69R0TyVHXCzp7fHfXGe4LeeV+98Z6gd95Xb7yn1kpk0dZiYIzXyioZFyzmxx8kInsDA4CFMdsGiEiKt5wDHAGsUFUF3gR+4B16IfB8Au/BGGNMCxIWSLwcw1XAK8DnwDxVXS4it4hIbCusacATXpCIGgvkicgnuMBxu6qu8Pb9Cvi5iKzC1Zn8M1H3YIwxpmUJHf1XVRcAC+K23RS3fnMj570P7N/ENVfjWoR1llmd+F6dpTfeE/TO++qN9wS987564z21itTPCBhjjDFtY0OkGGOMaRcLJMYYY9rFAkkzWhorrCcQkREi8qaIfC4iy0Xkam/7QBF5zRuz7DURGdDVaW0rEfGLyMci8oK33uPHYRORbBF5SkS+8L6zw3v6dyUi13j/95aJyOMiktoTvysRmS0ihSKyLGZbo9+NOH/znh2fishBXZfyxLNA0oTWjBXWQ4SAX6jqWOAw4ErvPq4HXvfGLHvdW+9prsa1CIzqDeOw3Q28rKr7AN/C3V+P/a5EZBjwU2CCqu4H+HFdAXridzUXmBS3ranv5nvAGO81A5jZSWnsEhZImtbWscK6JVXdqKofectluAfTMNy9POQd1uPGLBOR4cBk4EFvvcePwyYi/YHv4DVpV9VaVS2mh39XuNahaSISANKBjfTA70pV3wG2xW1u6ruZAjyszge4jtRDOyelnc8CSdNaPVZYTyEio3AjBCwChqjqRnDBBhjcdSnbKXcB1wERb73V47B1Y7sDRcAcr8juQRHJoAd/V6paAPwFWIcLICXAEnr+dxXV1HfT654fzbFA0rS2jBXW7YlIJm6ImZ+pamNjlvUYInIKUKiqS2I3N3JoT/u+AsBBwExVPRCooAcVYzXGqzOYghuUdVcgA1fsE6+nfVct6Q3/H1vNAknT2jJWWLcmIkm4IPKoqkbnfNkczWp7/xZ2Vfp2whHAaSKyBlfkeCwuh5LtFZ9Az/y+8oF8VV3krT+FCyw9+bs6HvhGVYtUNYibc+jb9PzvKqqp76bXPD9awwJJ01o1Vlh359Ud/BP4XFXvjNk1HzdWGfSwMctU9QZVHa6qo3Dfyxuqeh49fBw2Vd0ErPfGnwM4DlhBD/6ucEVah4lIuvd/MXpPPfq7itHUdzMfuMBrvXUYUBItAuuNrGd7M0TkZNwvXT8wW1V/38VJajMRORJ4F/iMHfUJ/4erJ5kHjMT9sZ+lqvEVid2eiBwDXKuqp3hTDjwBDAQ+Bn6oqjVdmb62EpHxuAYEycBq4CLcD74e+12JyG+Bc3AtCD8GLsXVF/So70pEHgeOwQ0Xvxn4DfAcjXw3XtC8F9fKqxK4SFXzuiLdncECiTHGmHaxoi1jjDHtYoHEGGNMu1ggMcYY0y4WSIwxxrSLBRJjjDHtYoHEGGNMu1ggMSZBRGS81xcpun5aR01HICI/E5H0jriWMe1l/UiMSRARmY4bPv2qBFx7jXftLW04x6+q4Y5OizGWIzF9noiM8iaResCbgOlVEUlr4tg9RORlEVkiIu+KyD7e9rO8iZs+EZF3vGF1bgHOEZGlInKOiEwXkXu94+eKyExxk46tFpGjvYmTPheRuTHvN1NE8rx0/dbb9lPcAIhvisib3rZpIvKZl4Y/xpxfLiK3iMgi4HARuV1EVniTLf0lMZ+o6XNU1V726tMvYBRu+I7x3vo83JAdjR37OjDGWz4UN84XuCFohnnL2d6/04F7Y86tW8dNkvQEbpTYKUApsD/ux92SmLQM9P71A28BB3jra4Acb3lX3PAcubgRhN8ATvf2KXB29FrASnaURGR39Wdvr97xshyJMc43qrrUW16CCy71eEPxfxv4t4gsBf4BRCcreg+YKyI/wj30W+M/qqq4ILRZVT9T1QiwPOb9zxaRj3DjUe2Lm60z3iHAW+pG2A0Bj+ImyAII40Z+BhesqoEHReQM3BhQxrRboOVDjOkTYgcMDAONFW35cBMyjY/foaqXi8ihuFkbl3qDL7b2PSNx7x8BAiIyGrgWOERVt3tFXqmNXKexuS+iqtWrF1HVkIhMxI3AOxW4CjcEvzHtYjkSY1pJ3YRg34jIWeCG6BeRb3nLe6jqIlW9CdiCm4uiDOjXjrfsj5vcqkREhlB/QqjYay8CjhaRHBHxA9OAt+Mv5uWoslR1AfAzoDXBzpgWWY7EmLY5D5gpIjcCSbh6jk+AP4vIGFzu4HVv2zrgeq8Y7La2vpGqfiIiH+OKulbjis+iZgEvichGVf2uiNyAm+NDgAWq2tj8Hv2A50Uk1TvumramyZjGWPNfY4wx7WJFW8YYY9rFiraMaYSI3IebGz7W3ao6pyvSY0x3ZkVbxhhj2sWKtowxxrSLBRJjjDHtYoHEGGNMu1ggMcYY0y7/HwcekW0V7DYUAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1d4eab92438>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-auc-mean']\n",
    "test_stds = cvresult['test-auc-std'] \n",
    "        \n",
    "train_means = cvresult['train-auc-mean']\n",
    "train_stds = cvresult['train-auc-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs auc\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'auc' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.4 对subsample 和 colsample_bytree进行调优\n",
    "粗调，步长为0.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bytree': [0.6, 0.7, 0.8, 0.9],\n",
       " 'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8]}"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "param_test2_4 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test2_4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.06354, std: 0.00120, params: {'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  mean: -0.06317, std: 0.00149, params: {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  mean: -0.06318, std: 0.00125, params: {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  mean: -0.06298, std: 0.00107, params: {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  mean: -0.06274, std: 0.00118, params: {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  mean: -0.06264, std: 0.00119, params: {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  mean: -0.06329, std: 0.00149, params: {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  mean: -0.06312, std: 0.00107, params: {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  mean: -0.06275, std: 0.00107, params: {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  mean: -0.06271, std: 0.00123, params: {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  mean: -0.06274, std: 0.00142, params: {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  mean: -0.06258, std: 0.00139, params: {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  mean: -0.06341, std: 0.00131, params: {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  mean: -0.06318, std: 0.00131, params: {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  mean: -0.06306, std: 0.00127, params: {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  mean: -0.06282, std: 0.00137, params: {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  mean: -0.06269, std: 0.00138, params: {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  mean: -0.06255, std: 0.00143, params: {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  mean: -0.06331, std: 0.00133, params: {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  mean: -0.06313, std: 0.00147, params: {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  mean: -0.06272, std: 0.00146, params: {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  mean: -0.06270, std: 0.00124, params: {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  mean: -0.06269, std: 0.00128, params: {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  mean: -0.06252, std: 0.00117, params: {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " {'colsample_bytree': 0.9, 'subsample': 0.8},\n",
       " -0.06251730440564122)"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_4 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=115,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.8,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        nthread=4,\n",
    "        objective= 'binary:logistic',\n",
    "        seed=27)\n",
    "\n",
    "gsearch2_4 = GridSearchCV(xgb2_4, param_grid = param_test2_4, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_4.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_4.grid_scores_, gsearch2_4.best_params_,     gsearch2_4.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([15.24144864, 15.69207535, 16.08976111, 18.47450433, 26.95456872,\n",
       "        27.64115596, 29.24923563, 25.59315743, 31.25997682, 31.5856214 ,\n",
       "        32.41740766, 30.68414874, 28.59822159, 30.41062989, 29.60376573,\n",
       "        30.6839252 , 23.90505137, 22.246591  , 21.24966955, 22.24600487,\n",
       "        23.57257147, 24.75081401, 24.4137641 , 23.12425332]),\n",
       " 'mean_score_time': array([0.08974471, 0.08376441, 0.081215  , 0.11088319, 0.13091927,\n",
       "        0.1564641 , 0.13004236, 0.12183547, 0.14301429, 0.14910531,\n",
       "        0.14980197, 0.16675019, 0.14660668, 0.13204527, 0.11728339,\n",
       "        0.13543439, 0.11130042, 0.09993057, 0.10033083, 0.10731192,\n",
       "        0.09414668, 0.10392046, 0.11429191, 0.08935943]),\n",
       " 'mean_test_score': array([-0.06353873, -0.06317371, -0.06317625, -0.06298258, -0.06274259,\n",
       "        -0.0626378 , -0.06329078, -0.06311567, -0.06274975, -0.06271244,\n",
       "        -0.06273837, -0.0625832 , -0.06341192, -0.06318389, -0.06305903,\n",
       "        -0.06282103, -0.06269475, -0.0625544 , -0.06330668, -0.06313013,\n",
       "        -0.06272258, -0.06269888, -0.06268905, -0.0625173 ]),\n",
       " 'mean_train_score': array([-0.05701903, -0.05625654, -0.05593697, -0.05558467, -0.05534132,\n",
       "        -0.05519532, -0.05658278, -0.05607264, -0.05544677, -0.05520178,\n",
       "        -0.05508084, -0.05499003, -0.05653428, -0.05578346, -0.05524204,\n",
       "        -0.05502845, -0.0547538 , -0.05479474, -0.05640842, -0.05546569,\n",
       "        -0.05517283, -0.05479282, -0.05464872, -0.05466672]),\n",
       " 'param_colsample_bytree': masked_array(data=[0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.7, 0.7, 0.7, 0.7, 0.7,\n",
       "                    0.7, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.9, 0.9, 0.9, 0.9,\n",
       "                    0.9, 0.9],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_subsample': masked_array(data=[0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.3, 0.4, 0.5, 0.6, 0.7,\n",
       "                    0.8, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.3, 0.4, 0.5, 0.6,\n",
       "                    0.7, 0.8],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " 'rank_test_score': array([24, 18, 19, 14, 11,  4, 21, 16, 12,  8, 10,  3, 23, 20, 15, 13,  6,\n",
       "         2, 22, 17,  9,  7,  5,  1]),\n",
       " 'split0_test_score': array([-0.06222694, -0.06235293, -0.06239554, -0.0624649 , -0.06242493,\n",
       "        -0.06231953, -0.06228499, -0.06209522, -0.06220462, -0.06203499,\n",
       "        -0.06185826, -0.06194815, -0.06293028, -0.06224622, -0.06228505,\n",
       "        -0.06217589, -0.06176785, -0.06208291, -0.06211316, -0.06208223,\n",
       "        -0.06185733, -0.06240999, -0.06204574, -0.06201235]),\n",
       " 'split0_train_score': array([-0.05710281, -0.05634698, -0.05632165, -0.05594995, -0.05556558,\n",
       "        -0.05539353, -0.05670614, -0.05647372, -0.05573138, -0.05554846,\n",
       "        -0.05554257, -0.05519449, -0.05679605, -0.0562343 , -0.05577177,\n",
       "        -0.05540957, -0.05494118, -0.05525255, -0.05650352, -0.0559842 ,\n",
       "        -0.05546501, -0.05497461, -0.05493566, -0.05494213]),\n",
       " 'split1_test_score': array([-0.06517197, -0.06446932, -0.06485438, -0.06415441, -0.06386755,\n",
       "        -0.06404248, -0.06554726, -0.06461324, -0.06390292, -0.06446758,\n",
       "        -0.06468134, -0.0643968 , -0.06519928, -0.06514422, -0.06457643,\n",
       "        -0.06447973, -0.06441619, -0.06448278, -0.06492989, -0.06519437,\n",
       "        -0.06477433, -0.06415164, -0.06436873, -0.06395985]),\n",
       " 'split1_train_score': array([-0.05670616, -0.05619558, -0.05538967, -0.05511652, -0.0548075 ,\n",
       "        -0.05473036, -0.05616394, -0.05582502, -0.05517537, -0.0547599 ,\n",
       "        -0.05455636, -0.0546995 , -0.05602877, -0.05531695, -0.05472509,\n",
       "        -0.05449211, -0.05413011, -0.05419046, -0.05607117, -0.0550217 ,\n",
       "        -0.05467652, -0.05440377, -0.05439827, -0.05422217]),\n",
       " 'split2_test_score': array([-0.06478475, -0.06536658, -0.06442671, -0.06436416, -0.06430586,\n",
       "        -0.06399613, -0.06453568, -0.06416332, -0.06412204, -0.06389038,\n",
       "        -0.06417463, -0.06401275, -0.06464924, -0.06435834, -0.06461537,\n",
       "        -0.06445004, -0.0642647 , -0.06389146, -0.06493317, -0.06462923,\n",
       "        -0.06417163, -0.06404492, -0.06410138, -0.06382913]),\n",
       " 'split2_train_score': array([-0.05671666, -0.05586573, -0.0558046 , -0.05538262, -0.05529645,\n",
       "        -0.05525663, -0.0562468 , -0.05554023, -0.05538975, -0.0552188 ,\n",
       "        -0.0549549 , -0.05484175, -0.05617194, -0.05533236, -0.05502326,\n",
       "        -0.05506715, -0.05478989, -0.05458414, -0.05639657, -0.05509291,\n",
       "        -0.05503454, -0.0543594 , -0.05426843, -0.05434105]),\n",
       " 'split3_test_score': array([-0.06276214, -0.06138506, -0.06158401, -0.06172553, -0.06114582,\n",
       "        -0.0611281 , -0.06168034, -0.06204476, -0.06143232, -0.06142752,\n",
       "        -0.06106879, -0.06076458, -0.06169957, -0.06226605, -0.06176364,\n",
       "        -0.06139481, -0.06101293, -0.06060612, -0.06206942, -0.06192298,\n",
       "        -0.06123607, -0.06093709, -0.06147219, -0.06100904]),\n",
       " 'split3_train_score': array([-0.05753753, -0.05635386, -0.05610131, -0.05578314, -0.05562662,\n",
       "        -0.05516466, -0.05695467, -0.05619497, -0.05551942, -0.05502206,\n",
       "        -0.05482574, -0.05498113, -0.05685383, -0.05595676, -0.05540382,\n",
       "        -0.05505197, -0.05499514, -0.05489118, -0.05661932, -0.05559528,\n",
       "        -0.05557634, -0.05517853, -0.05499565, -0.05484927]),\n",
       " 'split4_test_score': array([-0.06274787, -0.06229454, -0.06262054, -0.06220382, -0.06196869,\n",
       "        -0.06170265, -0.06240553, -0.06266177, -0.06208676, -0.06174166,\n",
       "        -0.06190873, -0.06179363, -0.06258108, -0.06190456, -0.06205456,\n",
       "        -0.0616046 , -0.06201201, -0.0617086 , -0.06248774, -0.06182176,\n",
       "        -0.06157341, -0.06195063, -0.06145712, -0.06177605]),\n",
       " 'split4_train_score': array([-0.05703201, -0.05652055, -0.0560676 , -0.05569115, -0.05541045,\n",
       "        -0.05543141, -0.05684237, -0.05632925, -0.05541795, -0.05545968,\n",
       "        -0.05552463, -0.05523329, -0.05682082, -0.05607693, -0.05528626,\n",
       "        -0.05512144, -0.0549127 , -0.05505535, -0.0564515 , -0.05563437,\n",
       "        -0.05511175, -0.0550478 , -0.0546456 , -0.05497899]),\n",
       " 'std_fit_time': array([0.73830291, 0.20911706, 0.25398533, 1.51250357, 0.46175186,\n",
       "        0.95004791, 0.44373019, 1.4331938 , 0.35337687, 0.55742467,\n",
       "        0.42754412, 0.96100125, 0.72141449, 0.43517434, 1.11615501,\n",
       "        2.19068889, 1.72227842, 0.15292675, 0.26907206, 0.23154237,\n",
       "        0.25425429, 0.10433341, 0.20822705, 1.19522912]),\n",
       " 'std_score_time': array([0.01773635, 0.00973574, 0.0109143 , 0.01710228, 0.02392104,\n",
       "        0.02525101, 0.03502589, 0.01525582, 0.01871785, 0.01283568,\n",
       "        0.02234725, 0.03975955, 0.00745932, 0.02767048, 0.02382358,\n",
       "        0.03708773, 0.01820052, 0.01509151, 0.01681377, 0.014057  ,\n",
       "        0.00510858, 0.00921339, 0.01835223, 0.01153766]),\n",
       " 'std_test_score': array([0.00119746, 0.00149219, 0.00125166, 0.00107112, 0.00117972,\n",
       "        0.00118938, 0.00148528, 0.00107094, 0.00106633, 0.00122641,\n",
       "        0.00142045, 0.00139045, 0.00130996, 0.00131001, 0.00126576,\n",
       "        0.00136637, 0.00138433, 0.00143106, 0.00133464, 0.00146803,\n",
       "        0.00145522, 0.0012385 , 0.00128283, 0.00117312]),\n",
       " 'std_train_score': array([0.00030507, 0.00022082, 0.0003191 , 0.00029804, 0.00029101,\n",
       "        0.00025136, 0.00031913, 0.00034248, 0.00018112, 0.00028794,\n",
       "        0.00039145, 0.00020369, 0.00035765, 0.00038485, 0.00035323,\n",
       "        0.00029786, 0.00031903, 0.00037318, 0.00018399, 0.00036061,\n",
       "        0.00032167, 0.00034236, 0.00028637, 0.00031949])}"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_4.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.062517 using {'colsample_bytree': 0.9, 'subsample': 0.8}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1d4801387f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_4.best_score_, gsearch2_4.best_params_))\n",
    "test_means = gsearch2_4.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_4.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_4.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_4.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_4.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.5 对subsample 和 colsample_bytree进行调优\n",
    "粗调，步长为0.05"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bytree': [0.85, 0.9, 0.95], 'subsample': [0.75, 0.8, 0.85]}"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "subsample = [0.75,0.8,0.85]\n",
    "colsample_bytree = [0.85,0.9,0.95]\n",
    "param_test2_5 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test2_5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.06258, std: 0.00126, params: {'colsample_bytree': 0.85, 'subsample': 0.75},\n",
       "  mean: -0.06255, std: 0.00134, params: {'colsample_bytree': 0.85, 'subsample': 0.8},\n",
       "  mean: -0.06243, std: 0.00120, params: {'colsample_bytree': 0.85, 'subsample': 0.85},\n",
       "  mean: -0.06270, std: 0.00133, params: {'colsample_bytree': 0.9, 'subsample': 0.75},\n",
       "  mean: -0.06252, std: 0.00117, params: {'colsample_bytree': 0.9, 'subsample': 0.8},\n",
       "  mean: -0.06253, std: 0.00133, params: {'colsample_bytree': 0.9, 'subsample': 0.85},\n",
       "  mean: -0.06267, std: 0.00133, params: {'colsample_bytree': 0.95, 'subsample': 0.75},\n",
       "  mean: -0.06268, std: 0.00130, params: {'colsample_bytree': 0.95, 'subsample': 0.8},\n",
       "  mean: -0.06254, std: 0.00137, params: {'colsample_bytree': 0.95, 'subsample': 0.85}],\n",
       " {'colsample_bytree': 0.85, 'subsample': 0.85},\n",
       " -0.06243467495842043)"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_5 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=115,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.8,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        nthread=4,\n",
    "        objective= 'binary:logistic',\n",
    "        seed=27)\n",
    "\n",
    "gsearch2_5 = GridSearchCV(xgb2_5, param_grid = param_test2_5, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_5.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_5.grid_scores_, gsearch2_5.best_params_,     gsearch2_5.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([20.22318587, 22.84073229, 19.72762399, 22.36915059, 33.04138241,\n",
       "        24.92490869, 23.80105147, 21.75886445, 19.35969882]),\n",
       " 'mean_score_time': array([0.10132737, 0.08956475, 0.10839005, 0.09274893, 0.10631399,\n",
       "        0.10463152, 0.10647502, 0.09476314, 0.09084425]),\n",
       " 'mean_test_score': array([-0.0625817 , -0.06255032, -0.06243467, -0.06270471, -0.0625173 ,\n",
       "        -0.06253441, -0.06266758, -0.06267652, -0.06254191]),\n",
       " 'mean_train_score': array([-0.05469544, -0.05474568, -0.0547409 , -0.05462692, -0.05466672,\n",
       "        -0.05461806, -0.05469678, -0.05455785, -0.05456413]),\n",
       " 'param_colsample_bytree': masked_array(data=[0.85, 0.85, 0.85, 0.9, 0.9, 0.9, 0.95, 0.95, 0.95],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_subsample': masked_array(data=[0.75, 0.8, 0.85, 0.75, 0.8, 0.85, 0.75, 0.8, 0.85],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'colsample_bytree': 0.85, 'subsample': 0.75},\n",
       "  {'colsample_bytree': 0.85, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.85, 'subsample': 0.85},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.75},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.85},\n",
       "  {'colsample_bytree': 0.95, 'subsample': 0.75},\n",
       "  {'colsample_bytree': 0.95, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.95, 'subsample': 0.85}],\n",
       " 'rank_test_score': array([6, 5, 1, 9, 2, 3, 7, 8, 4]),\n",
       " 'split0_test_score': array([-0.06199645, -0.06200245, -0.06179921, -0.06202342, -0.06201235,\n",
       "        -0.06198544, -0.06215963, -0.06222099, -0.06184234]),\n",
       " 'split0_train_score': array([-0.05509285, -0.05541267, -0.05527818, -0.05507893, -0.05494213,\n",
       "        -0.05456227, -0.05509703, -0.05484382, -0.0546401 ]),\n",
       " 'split1_test_score': array([-0.06404794, -0.06410737, -0.06380594, -0.06448477, -0.06395985,\n",
       "        -0.06422912, -0.06416914, -0.06415482, -0.06419956]),\n",
       " 'split1_train_score': array([-0.05408277, -0.0546599 , -0.05437404, -0.05432689, -0.05422217,\n",
       "        -0.05398771, -0.05412464, -0.05416434, -0.05409655]),\n",
       " 'split2_test_score': array([-0.06406021, -0.06415864, -0.06395575, -0.06408949, -0.06382913,\n",
       "        -0.06398405, -0.06432331, -0.06418807, -0.06409131]),\n",
       " 'split2_train_score': array([-0.05452713, -0.05419039, -0.05444983, -0.05435276, -0.05434105,\n",
       "        -0.05444213, -0.05457008, -0.05430397, -0.05427762]),\n",
       " 'split3_test_score': array([-0.06090577, -0.06089856, -0.06110167, -0.06111591, -0.06100904,\n",
       "        -0.06095186, -0.06117882, -0.06086602, -0.06076945]),\n",
       " 'split3_train_score': array([-0.05470273, -0.05474903, -0.05492877, -0.05457539, -0.05484927,\n",
       "        -0.05503034, -0.05498955, -0.05484091, -0.05483932]),\n",
       " 'split4_test_score': array([-0.06189802, -0.06158447, -0.06151071, -0.06180987, -0.06177605,\n",
       "        -0.06152147, -0.06150688, -0.06195259, -0.0618068 ]),\n",
       " 'split4_train_score': array([-0.05507173, -0.05471642, -0.05467368, -0.05480062, -0.05497899,\n",
       "        -0.05506785, -0.05470257, -0.05463622, -0.05496706]),\n",
       " 'std_fit_time': array([1.35123237, 1.81997619, 0.68297544, 0.77810419, 4.54645975,\n",
       "        0.61784343, 0.55947627, 1.08956568, 4.86248264]),\n",
       " 'std_score_time': array([0.0231294 , 0.00975617, 0.03907098, 0.00467802, 0.02393165,\n",
       "        0.01561573, 0.01350111, 0.01426301, 0.01114364]),\n",
       " 'std_test_score': array([0.0012613 , 0.00133958, 0.00120236, 0.00133232, 0.00117312,\n",
       "        0.00132705, 0.00132798, 0.00130227, 0.00136527]),\n",
       " 'std_train_score': array([0.00037504, 0.00039024, 0.000331  , 0.00028366, 0.00031949,\n",
       "        0.00040092, 0.00034332, 0.00027833, 0.00033002])}"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_5.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.062435 using {'colsample_bytree': 0.85, 'subsample': 0.85}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1d4801235c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_5.best_score_, gsearch2_5.best_params_))\n",
    "test_means = gsearch2_5.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_5.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_5.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_5.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_5.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.6 对reg_alpha 和reg_lambda进行调优"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [0.1, 1, 1.5, 2], 'reg_lambda': [0.1, 0.5, 1, 2]}"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reg_alpha = [ 0.1,1,1.5, 2]    #default = 0, 测试0.1,1，1.5，2\n",
    "reg_lambda = [0.1,0.5, 1, 2]      #default = 1，测试0.1， 0.5， 1，2\n",
    "\n",
    "param_test2_6 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test2_6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.06253, std: 0.00134, params: {'reg_alpha': 0.1, 'reg_lambda': 0.1},\n",
       "  mean: -0.06253, std: 0.00118, params: {'reg_alpha': 0.1, 'reg_lambda': 0.5},\n",
       "  mean: -0.06251, std: 0.00117, params: {'reg_alpha': 0.1, 'reg_lambda': 1},\n",
       "  mean: -0.06255, std: 0.00122, params: {'reg_alpha': 0.1, 'reg_lambda': 2},\n",
       "  mean: -0.06249, std: 0.00119, params: {'reg_alpha': 1, 'reg_lambda': 0.1},\n",
       "  mean: -0.06252, std: 0.00116, params: {'reg_alpha': 1, 'reg_lambda': 0.5},\n",
       "  mean: -0.06255, std: 0.00118, params: {'reg_alpha': 1, 'reg_lambda': 1},\n",
       "  mean: -0.06264, std: 0.00142, params: {'reg_alpha': 1, 'reg_lambda': 2},\n",
       "  mean: -0.06251, std: 0.00126, params: {'reg_alpha': 1.5, 'reg_lambda': 0.1},\n",
       "  mean: -0.06256, std: 0.00124, params: {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  mean: -0.06259, std: 0.00141, params: {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  mean: -0.06255, std: 0.00142, params: {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  mean: -0.06268, std: 0.00135, params: {'reg_alpha': 2, 'reg_lambda': 0.1},\n",
       "  mean: -0.06257, std: 0.00135, params: {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  mean: -0.06265, std: 0.00130, params: {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  mean: -0.06250, std: 0.00127, params: {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " {'reg_alpha': 1, 'reg_lambda': 0.1},\n",
       " -0.06248542198636536)"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_6 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=115,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.85,\n",
    "        colsample_bytree=0.85,\n",
    "        colsample_bylevel=0.7,\n",
    "        nthread=4,\n",
    "        objective= 'binary:logistic',\n",
    "        seed=27)\n",
    "\n",
    "gsearch2_6 = GridSearchCV(xgb2_6, param_grid = param_test2_6, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_6.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_6.grid_scores_, gsearch2_6.best_params_,     gsearch2_6.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([18.27597375, 18.25520463, 19.03172889, 20.57526212, 21.67324586,\n",
       "        20.98901753, 21.54868279, 19.41752701, 23.25146561, 22.83370314,\n",
       "        22.37603555, 21.32727747, 24.50158248, 20.96177387, 21.98684802,\n",
       "        20.31399212]),\n",
       " 'mean_score_time': array([0.09873419, 0.08856187, 0.09962215, 0.12685962, 0.0997551 ,\n",
       "        0.0989327 , 0.10239258, 0.10190139, 0.09778585, 0.1089179 ,\n",
       "        0.13966961, 0.08776383, 0.09398475, 0.09074488, 0.12781377,\n",
       "        0.1185297 ]),\n",
       " 'mean_test_score': array([-0.06253332, -0.06252798, -0.06251155, -0.06254687, -0.06248542,\n",
       "        -0.06251983, -0.06254909, -0.06263968, -0.06251056, -0.06255795,\n",
       "        -0.06258796, -0.06255246, -0.06268118, -0.06257005, -0.0626514 ,\n",
       "        -0.06249811]),\n",
       " 'mean_train_score': array([-0.0543078 , -0.05457345, -0.05477073, -0.05504053, -0.05487319,\n",
       "        -0.05510257, -0.05507862, -0.05554105, -0.05505607, -0.05521356,\n",
       "        -0.05537102, -0.05571262, -0.05524887, -0.05545186, -0.05575851,\n",
       "        -0.05588389]),\n",
       " 'param_reg_alpha': masked_array(data=[0.1, 0.1, 0.1, 0.1, 1, 1, 1, 1, 1.5, 1.5, 1.5, 1.5, 2,\n",
       "                    2, 2, 2],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_reg_lambda': masked_array(data=[0.1, 0.5, 1, 2, 0.1, 0.5, 1, 2, 0.1, 0.5, 1, 2, 0.1,\n",
       "                    0.5, 1, 2],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'reg_alpha': 0.1, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " 'rank_test_score': array([ 7,  6,  4,  8,  1,  5,  9, 14,  3, 11, 13, 10, 16, 12, 15,  2]),\n",
       " 'split0_test_score': array([-0.06196487, -0.06218051, -0.06201531, -0.06212706, -0.06180984,\n",
       "        -0.0619621 , -0.06189186, -0.06186594, -0.0619259 , -0.06182615,\n",
       "        -0.06173575, -0.06153648, -0.06193091, -0.0618558 , -0.0620231 ,\n",
       "        -0.06173474]),\n",
       " 'split0_train_score': array([-0.05488756, -0.05527483, -0.05543162, -0.05554462, -0.05509818,\n",
       "        -0.05548934, -0.05559156, -0.05586045, -0.05554121, -0.05575304,\n",
       "        -0.05577665, -0.05570637, -0.05543914, -0.05567117, -0.05613929,\n",
       "        -0.05626723]),\n",
       " 'split1_test_score': array([-0.06418364, -0.06383626, -0.06398941, -0.06414626, -0.06396345,\n",
       "        -0.06386098, -0.06405561, -0.0645745 , -0.06421314, -0.06422375,\n",
       "        -0.06442757, -0.06434459, -0.06444786, -0.06464072, -0.06437469,\n",
       "        -0.06426857]),\n",
       " 'split1_train_score': array([-0.05376503, -0.0540865 , -0.0545091 , -0.05431596, -0.05470811,\n",
       "        -0.05468172, -0.0548513 , -0.05493958, -0.054606  , -0.05470233,\n",
       "        -0.05469157, -0.05565948, -0.05468072, -0.05499197, -0.05541107,\n",
       "        -0.05569371]),\n",
       " 'split2_test_score': array([-0.06407478, -0.06396677, -0.06381051, -0.06383566, -0.06388626,\n",
       "        -0.06390502, -0.06383232, -0.06407176, -0.06381926, -0.06385803,\n",
       "        -0.06414826, -0.06421671, -0.06417188, -0.0636351 , -0.06402109,\n",
       "        -0.06378928]),\n",
       " 'split2_train_score': array([-0.05419028, -0.05426499, -0.0542808 , -0.05489136, -0.05488125,\n",
       "        -0.05492358, -0.05470955, -0.05537734, -0.05526326, -0.05504443,\n",
       "        -0.05525658, -0.0557655 , -0.05527838, -0.05507338, -0.05545918,\n",
       "        -0.05547328]),\n",
       " 'split3_test_score': array([-0.06102171, -0.06105207, -0.06108562, -0.06119447, -0.06140171,\n",
       "        -0.06098699, -0.06108425, -0.0609382 , -0.06121748, -0.06110257,\n",
       "        -0.0610914 , -0.06114211, -0.06135154, -0.06101767, -0.06111214,\n",
       "        -0.06126209]),\n",
       " 'split3_train_score': array([-0.05446883, -0.05455222, -0.05503405, -0.05521493, -0.05477611,\n",
       "        -0.05505936, -0.05495839, -0.0556627 , -0.05488091, -0.05510639,\n",
       "        -0.05557741, -0.05575969, -0.05549718, -0.05569527, -0.05571959,\n",
       "        -0.05619985]),\n",
       " 'split4_test_score': array([-0.0614215 , -0.06160418, -0.06165682, -0.06143079, -0.06136576,\n",
       "        -0.06188398, -0.06188129, -0.0617479 , -0.06137688, -0.06177917,\n",
       "        -0.06153673, -0.06152231, -0.06150363, -0.06170086, -0.06172587,\n",
       "        -0.06143578]),\n",
       " 'split4_train_score': array([-0.05422727, -0.05468869, -0.05459808, -0.05523579, -0.0549023 ,\n",
       "        -0.05535887, -0.05528229, -0.05586516, -0.05498896, -0.05546161,\n",
       "        -0.0555529 , -0.05567206, -0.05534894, -0.05582753, -0.05606342,\n",
       "        -0.05578541]),\n",
       " 'std_fit_time': array([0.67782335, 0.8513503 , 0.31766291, 1.31372186, 0.67639124,\n",
       "        1.03042144, 0.66960029, 0.52001831, 0.98536557, 2.02865361,\n",
       "        0.98045927, 0.30211535, 1.40125485, 0.77289909, 1.52106188,\n",
       "        1.12922866]),\n",
       " 'std_score_time': array([0.01294191, 0.00558452, 0.01670115, 0.02805849, 0.02452734,\n",
       "        0.01562825, 0.00939442, 0.00924843, 0.02287456, 0.02835568,\n",
       "        0.07559979, 0.00496692, 0.00568271, 0.00615372, 0.04046003,\n",
       "        0.03685499]),\n",
       " 'std_test_score': array([0.00133744, 0.00117763, 0.00117315, 0.00122228, 0.00118586,\n",
       "        0.00116467, 0.00117813, 0.00142009, 0.00125782, 0.001243  ,\n",
       "        0.00140639, 0.00141873, 0.00134616, 0.00134889, 0.00130126,\n",
       "        0.00126812]),\n",
       " 'std_train_score': array([3.67952345e-04, 4.09373446e-04, 4.10951214e-04, 4.17109825e-04,\n",
       "        1.32819992e-04, 2.91994243e-04, 3.18411694e-04, 3.49410119e-04,\n",
       "        3.21259237e-04, 3.61667239e-04, 3.78144935e-04, 4.36366496e-05,\n",
       "        2.93783270e-04, 3.47340178e-04, 2.99931502e-04, 3.03724553e-04])}"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_6.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.062485 using {'reg_alpha': 1, 'reg_lambda': 0.1}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\hplxg\\Anaconda3\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1d48008bf98>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_6.best_score_, gsearch2_6.best_params_))\n",
    "test_means = gsearch2_6.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_6.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_6.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_6.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_6.cv_results_).to_csv('my_preds_reg_alpha_reg_lambda_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "\n",
    "#log_reg_alpha = [0,0,0,0]\n",
    "#for index in range(len(reg_alpha)):\n",
    "#   log_reg_alpha[index] = math.log10(reg_alpha[index])\n",
    "    \n",
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, -test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_alpha' )                                                                                                      \n",
    "pyplot.ylabel( '-Log Loss' )\n",
    "pyplot.savefig( 'reg_alpha_vs_reg_lambda1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3 特征重要性"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.85, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=5, min_child_weight=4, missing=None, n_estimators=115,\n",
       "       n_jobs=1, nthread=4, objective='binary:logistic', random_state=0,\n",
       "       reg_alpha=1, reg_lambda=0.1, scale_pos_weight=1, seed=27,\n",
       "       silent=True, subsample=0.85)"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 建立最终模型\n",
    "xgb2_7 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=115,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.85,\n",
    "        colsample_bytree=0.85,\n",
    "        colsample_bylevel=0.7,\n",
    "        nthread=4,\n",
    "        objective= 'binary:logistic',\n",
    "        seed=27,\n",
    "        reg_alpha=1,\n",
    "        reg_lambda=0.1)\n",
    "\n",
    "xgb2_7.fit(X_train, y_train, eval_metric='auc')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.DataFrame({\"columns\":list(features), \"importance\":list(xgb2_7.feature_importances_.T)})\n",
    "df = df.sort_values(by=['importance'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>importance</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Monthly_Income</td>\n",
       "      <td>0.144359</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Existing_EMI</td>\n",
       "      <td>0.083652</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Salary_Account</td>\n",
       "      <td>0.070746</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Lead_Creation_Date</td>\n",
       "      <td>0.067878</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>Var5</td>\n",
       "      <td>0.065010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>City</td>\n",
       "      <td>0.063098</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>DOB_yr</td>\n",
       "      <td>0.061663</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>Interest_Rate</td>\n",
       "      <td>0.053059</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>Loan_Amount_Submitted</td>\n",
       "      <td>0.050669</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>Source</td>\n",
       "      <td>0.049713</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Loan_Amount_Applied</td>\n",
       "      <td>0.047323</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>EMI_Loan_Submitted</td>\n",
       "      <td>0.045889</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>Processing_Fee</td>\n",
       "      <td>0.043977</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Employer_Name</td>\n",
       "      <td>0.031071</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Loan_Tenure_Applied</td>\n",
       "      <td>0.029637</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>Var4</td>\n",
       "      <td>0.021511</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>Loan_Tenure_Submitted</td>\n",
       "      <td>0.018164</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>Var1</td>\n",
       "      <td>0.016252</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>Var2</td>\n",
       "      <td>0.010994</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>Filled_Form</td>\n",
       "      <td>0.010516</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>Device_Type</td>\n",
       "      <td>0.006692</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Gender</td>\n",
       "      <td>0.005736</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>Mobile_Verified</td>\n",
       "      <td>0.002390</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  columns  importance\n",
       "4          Monthly_Income    0.144359\n",
       "7            Existing_EMI    0.083652\n",
       "9          Salary_Account    0.070746\n",
       "1      Lead_Creation_Date    0.067878\n",
       "11                   Var5    0.065010\n",
       "3                    City    0.063098\n",
       "0                  DOB_yr    0.061663\n",
       "15          Interest_Rate    0.053059\n",
       "13  Loan_Amount_Submitted    0.050669\n",
       "21                 Source    0.049713\n",
       "5     Loan_Amount_Applied    0.047323\n",
       "17     EMI_Loan_Submitted    0.045889\n",
       "16         Processing_Fee    0.043977\n",
       "8           Employer_Name    0.031071\n",
       "6     Loan_Tenure_Applied    0.029637\n",
       "22                   Var4    0.021511\n",
       "14  Loan_Tenure_Submitted    0.018164\n",
       "12                   Var1    0.016252\n",
       "20                   Var2    0.010994\n",
       "18            Filled_Form    0.010516\n",
       "19            Device_Type    0.006692\n",
       "2                  Gender    0.005736\n",
       "10        Mobile_Verified    0.002390"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1d4800eb8d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.bar(range(len(xgb2_7.feature_importances_)), xgb2_7.feature_importances_)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
